From c17cd9ad3bb17ab5af2e736aca38eda9a3f8a737 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 16 Nov 2015 21:27:08 +0100 Subject: [PATCH] ??? --- .metadata/.bak_0.log | 14027 ++++++++++++++++ .../0/b052507c0e8b00151149b99c05b1b975 | 316 + .../10/d0e4ec032387001519af89c6c0264943 | 306 + .../11/e01f2e4b2287001519af89c6c0264943 | 575 + .../15/5014e4bc2287001519af89c6c0264943 | 583 + .../17/507a5da62287001519af89c6c0264943 | 577 + .../19/50c4f47b2087001519af89c6c0264943 | 491 + .../1a/b04e3d72168b00151149b99c05b1b975 | 5 + .../1a/c0bedf60e640001514c09dece48b36c7 | 73 + .../1d/40013c152287001519af89c6c0264943 | 579 + .../1d/709a3bde2d53001516cdaaef55e27ba4 | 15 + .../1e/606a09eede40001514c09dece48b36c7 | 297 + .../1e/d0e4168be540001514c09dece48b36c7 | 71 + .../2/008fa000f34500151ebce83b3129f79d | 78 + .../20/802a22d2de40001514c09dece48b36c7 | 71 + .../21/40187b959b8c0015169bb4f96b251538 | 328 + .../21/c0a02994e640001514c09dece48b36c7 | 74 + .../22/40feff6ce640001514c09dece48b36c7 | 73 + .../25/4082086f2087001519af89c6c0264943 | 491 + .../25/c05ce792e640001514c09dece48b36c7 | 73 + .../26/20c757a6168b00151149b99c05b1b975 | 323 + .../28/a02aeb89168b00151149b99c05b1b975 | 10 + .../29/40e1da43e340001514c09dece48b36c7 | 295 + .../29/50338b22e340001514c09dece48b36c7 | 298 + .../2b/20adfe8f138b00151149b99c05b1b975 | 318 + .../2b/702271ffde40001514c09dece48b36c7 | 297 + .../2c/209f3c7b168b00151149b99c05b1b975 | 7 + .../2d/b05650032387001519af89c6c0264943 | 306 + .../30/60f899dc2d53001516cdaaef55e27ba4 | 15 + .../31/20f593fb158b00151149b99c05b1b975 | 322 + .../31/b04c406a0e8b00151149b99c05b1b975 | 321 + .../32/40c22aa12287001519af89c6c0264943 | 577 + .../32/a09be810128b00151149b99c05b1b975 | 318 + .../32/a0c729e6158b00151149b99c05b1b975 | 319 + .../34/30320daa0f8b00151149b99c05b1b975 | 319 + .../34/509e3a962287001519af89c6c0264943 | 574 + .../34/60480de22187001519af89c6c0264943 | 588 + .../35/d0edb6ae2287001519af89c6c0264943 | 583 + .../37/a0d4af822187001519af89c6c0264943 | 584 + .../37/c0f63c61e240001514c09dece48b36c7 | 451 + .../38/5089bf762287001519af89c6c0264943 | 574 + .../38/e08c48b99a8c0015169bb4f96b251538 | 336 + .../3b/b0717c88118b00151149b99c05b1b975 | 318 + .../3c/d00a0e58e240001514c09dece48b36c7 | 450 + .../3e/6022916ee240001514c09dece48b36c7 | 452 + .../3f/606d4a802187001519af89c6c0264943 | 496 + .../3f/b0d12138168b00151149b99c05b1b975 | 323 + .../3f/c0cb3f450e8b00151149b99c05b1b975 | 322 + .../4/d0391ad32187001519af89c6c0264943 | 588 + .../40/5022d9fb2187001519af89c6c0264943 | 588 + .../41/c0bb756d9b8c0015169bb4f96b251538 | 338 + .../41/e0ddf8b42087001519af89c6c0264943 | 496 + .../45/d00b6c840c8b00151149b99c05b1b975 | 302 + .../46/50ec87042387001519af89c6c0264943 | 306 + .../46/d0c39d6c2087001519af89c6c0264943 | 491 + .../47/509b62022387001519af89c6c0264943 | 305 + .../48/b0715a760e8b00151149b99c05b1b975 | 318 + .../4a/c036c9a02187001519af89c6c0264943 | 584 + .../4b/40b1bfa8755d001515f3fd278c34f57e | 465 + .../4c/e09817299b8c0015169bb4f96b251538 | 335 + .../4d/c0d5180e2087001519af89c6c0264943 | 491 + .../4e/40170f730e8b00151149b99c05b1b975 | 319 + .../51/408cc87e9b8c0015169bb4f96b251538 | 328 + .../53/40b494f5e540001514c09dece48b36c7 | 72 + .../53/d0c1dad6e440001514c09dece48b36c7 | 296 + .../57/2084190f168b00151149b99c05b1b975 | 323 + .../5b/008c7edd2d53001516cdaaef55e27ba4 | 16 + .../5b/e0d83cf9de40001514c09dece48b36c7 | 297 + .../5d/30629c52168b00151149b99c05b1b975 | 323 + .../5e/c0d6d38be640001514c09dece48b36c7 | 73 + .../5f/50257859e640001514c09dece48b36c7 | 72 + .../6/3059a485168b00151149b99c05b1b975 | 13 + .../6/50be8b389b8c0015169bb4f96b251538 | 337 + .../60/c08d9b862187001519af89c6c0264943 | 496 + .../61/b05b2a30138b00151149b99c05b1b975 | 318 + .../63/d06551420941001514c09dece48b36c7 | 74 + .../65/50f69b6c168b00151149b99c05b1b975 | 0 .../67/c0952ea8e240001514c09dece48b36c7 | 298 + .../6a/406f8416e340001514c09dece48b36c7 | 298 + .../6b/700669952d53001516cdaaef55e27ba4 | 13 + .../6b/c000fac32187001519af89c6c0264943 | 587 + .../6c/506c7d4ee140001514c09dece48b36c7 | 71 + .../6c/b03244ed9a8c0015169bb4f96b251538 | 335 + .../6e/60f4f3db2d53001516cdaaef55e27ba4 | 14 + .../6e/d0c7e2022387001519af89c6c0264943 | 306 + .../6f/d0569c5ae240001514c09dece48b36c7 | 451 + .../75/00578f8b118b00151149b99c05b1b975 | 318 + .../78/b0ba5a02168b00151149b99c05b1b975 | 322 + .../79/40cb73222287001519af89c6c0264943 | 575 + .../7a/d040fb952187001519af89c6c0264943 | 584 + .../7c/d028e4369b8c0015169bb4f96b251538 | 335 + .../7e/407c9a362287001519af89c6c0264943 | 575 + .../8/303bccc40e8b00151149b99c05b1b975 | 317 + .../80/506d6dc22187001519af89c6c0264943 | 587 + .../85/401c3763e640001514c09dece48b36c7 | 73 + .../8d/e0f3df742287001519af89c6c0264943 | 574 + .../8e/d06563122287001519af89c6c0264943 | 579 + .../8f/f041e4b79a8c0015169bb4f96b251538 | 319 + .../90/c0d422e92287001519af89c6c0264943 | 304 + .../93/5044523e0e8b00151149b99c05b1b975 | 320 + .../96/206d0ff9158b00151149b99c05b1b975 | 321 + .../97/c037f44de440001514c09dece48b36c7 | 296 + .../97/d0c07d01198b00151149b99c05b1b975 | 320 + .../97/f0a3a5f1de40001514c09dece48b36c7 | 297 + .../98/4037ffce9b8c0015169bb4f96b251538 | 328 + .../98/502802722287001519af89c6c0264943 | 303 + .../9a/e08e32dd2d53001516cdaaef55e27ba4 | 15 + .../9b/50bd8c072287001519af89c6c0264943 | 579 + .../9e/206f5678168b00151149b99c05b1b975 | 5 + .../9f/40b3b3122387001519af89c6c0264943 | 306 + .../a1/40b13fdfb94400151637bde96975c236 | 7 + .../a4/30f2b3fa118b00151149b99c05b1b975 | 318 + .../a5/102ab363e640001514c09dece48b36c7 | 73 + .../a6/306d822d138b00151149b99c05b1b975 | 318 + .../a8/4016faaee240001514c09dece48b36c7 | 299 + .../a9/a0007674168b00151149b99c05b1b975 | 5 + .../a9/c09d79ad2087001519af89c6c0264943 | 495 + .../ab/c07bf623e640001514c09dece48b36c7 | 72 + .../ac/50a4ecaae240001514c09dece48b36c7 | 298 + .../ad/b067a2dd2d53001516cdaaef55e27ba4 | 15 + .../ad/d005e8c02187001519af89c6c0264943 | 587 + .../ad/e01e43fdde40001514c09dece48b36c7 | 297 + .../ae/d01c7740e340001514c09dece48b36c7 | 295 + .../af/60ef08a60c8b00151149b99c05b1b975 | 320 + .../b/707985099b8c0015169bb4f96b251538 | 334 + .../b2/d06fefa82287001519af89c6c0264943 | 584 + .../b3/30deaf0b148b00151149b99c05b1b975 | 318 + .../b3/50a8a0439b8c0015169bb4f96b251538 | 338 + .../b3/f0d62592e540001514c09dece48b36c7 | 72 + .../b5/e01fc9c92187001519af89c6c0264943 | 588 + .../b6/30123c0f148b00151149b99c05b1b975 | 318 + .../b7/a0b1e23b138b00151149b99c05b1b975 | 318 + .../b9/5008fb862087001519af89c6c0264943 | 491 + .../b9/c0ad8e3ee340001514c09dece48b36c7 | 294 + .../bb/506865c02187001519af89c6c0264943 | 586 + .../bb/708754aee240001514c09dece48b36c7 | 298 + .../be/f0ff0a082087001519af89c6c0264943 | 491 + .../c3/207c49a0168b00151149b99c05b1b975 | 12 + .../c3/40771d08e740001514c09dece48b36c7 | 74 + .../c4/b03fc23d168b00151149b99c05b1b975 | 323 + .../c4/c09467ba168b00151149b99c05b1b975 | 321 + .../c5/40ffd3b49b8c0015169bb4f96b251538 | 583 + .../c8/2017ffab0f8b00151149b99c05b1b975 | 318 + .../c8/a0c64fa50e8b00151149b99c05b1b975 | 317 + .../c9/30f44f45158b00151149b99c05b1b975 | 318 + .../c9/d021561d2287001519af89c6c0264943 | 575 + .../ca/30f9fabe0e8b00151149b99c05b1b975 | 317 + .../cd/30833796168b00151149b99c05b1b975 | 10 + .../cd/502cf23c2287001519af89c6c0264943 | 575 + .../d/40ebea47e340001514c09dece48b36c7 | 296 + .../d0/405b2dafe240001514c09dece48b36c7 | 298 + .../d0/d0f74b8de640001514c09dece48b36c7 | 73 + .../d0/f0f48766e640001514c09dece48b36c7 | 73 + .../d1/50736f002287001519af89c6c0264943 | 579 + .../d2/50685e70e240001514c09dece48b36c7 | 453 + .../d4/b0879008128b00151149b99c05b1b975 | 318 + .../d4/c05ee3692087001519af89c6c0264943 | 491 + .../d5/d08253be2287001519af89c6c0264943 | 583 + .../d5/d0e71dc1e140001514c09dece48b36c7 | 450 + .../d8/4044c9a7e240001514c09dece48b36c7 | 297 + .../d9/40a17a9f2287001519af89c6c0264943 | 576 + .../da/c0b4ceef2187001519af89c6c0264943 | 588 + .../da/c0e99ca62187001519af89c6c0264943 | 584 + .../db/50afb721e640001514c09dece48b36c7 | 72 + .../e1/a094698b138b00151149b99c05b1b975 | 318 + .../e2/c05167a80c8b00151149b99c05b1b975 | 320 + .../e2/d01dd49f2087001519af89c6c0264943 | 491 + .../e3/d0df3dbadf40001514c09dece48b36c7 | 71 + .../e5/c05785819a8c0015169bb4f96b251538 | 320 + .../e7/507343312287001519af89c6c0264943 | 575 + .../e7/d014d3062387001519af89c6c0264943 | 306 + .../e9/504e12aee240001514c09dece48b36c7 | 298 + .../e9/c0b3154ce440001514c09dece48b36c7 | 296 + .../ea/b0d0b526128b00151149b99c05b1b975 | 318 + .../ed/e0c5e59d2187001519af89c6c0264943 | 584 + .../ed/f00520bce240001514c09dece48b36c7 | 299 + .../ee/b0b0b2700e8b00151149b99c05b1b975 | 321 + .../f/d05bb3872087001519af89c6c0264943 | 491 + .../f0/2032f0a2168b00151149b99c05b1b975 | 12 + .../f4/409165a82087001519af89c6c0264943 | 493 + .../f4/b0f896bf9b8c0015169bb4f96b251538 | 328 + .../f4/d060adb52087001519af89c6c0264943 | 496 + .../f5/60e49bf5de40001514c09dece48b36c7 | 297 + .../f6/2099de87138b00151149b99c05b1b975 | 318 + .../f8/b0609ebb0e8b00151149b99c05b1b975 | 317 + .../f9/408378442087001519af89c6c0264943 | 491 + .../fb/a04766fe188b00151149b99c05b1b975 | 320 + .../fc/20df70b6168b00151149b99c05b1b975 | 323 + .../ff/d02051bc0c8b00151149b99c05b1b975 | 320 + .../RemoteSystemsTempFiles/.markers.snap | Bin 0 -> 32 bytes .../RemoteSystemsTempFiles/.syncinfo.snap | Bin 0 -> 32 bytes .../.indexes/properties.index | Bin 0 -> 99 bytes .../TheButtonAutoFlair/.markers.snap | Bin 0 -> 352 bytes .../TheButtonAutoFlair/.syncinfo.snap | Bin 0 -> 32 bytes .../.root/.markers.snap | Bin 0 -> 32 bytes .../org.eclipse.core.resources/.root/71.tree | Bin 0 -> 5920 bytes .../.plugins/org.eclipse.core.resources/.snap | Bin 0 -> 1277 bytes .../org.eclipse.jdt.core/50372563.index | Bin 0 -> 29435 bytes .../org.eclipse.jdt.core/678131303.index | Bin 0 -> 220754 bytes .../org.eclipse.jdt.core/indexNamesMap.txt | 1 + .../org.eclipse.jdt.ui/jdt-images/0.png | Bin 0 -> 210 bytes .../org.eclipse.jdt.ui/jdt-images/1.png | Bin 0 -> 194 bytes .../org.eclipse.jdt.ui/jdt-images/2.png | Bin 0 -> 303 bytes .../org.eclipse.jdt.ui/jdt-images/3.png | Bin 0 -> 105 bytes .../org.eclipse.jdt.ui/jdt-images/4.png | Bin 0 -> 509 bytes .../org.eclipse.jdt.ui/jdt-images/5.png | Bin 0 -> 283 bytes .../2015/8/35/refactorings.history | 4 + .../2015/8/35/refactorings.index | 1 + .../dialog_settings.xml | 18 + .../org.eclipse.team.cvs.core/.running | 0 .../thebuttonautoflair/AnnouncerThread.class | Bin 0 -> 1637 bytes .../PlayerJoinTimerTask.class | Bin 0 -> 416 bytes .../thebuttonautoflair/PlayerListener$1.class | Bin 0 -> 2148 bytes .../thebuttonautoflair/PlayerListener$2.class | Bin 0 -> 1816 bytes .../thebuttonautoflair/PluginMain$2.class | Bin 0 -> 714 bytes 215 files changed, 75738 insertions(+) create mode 100644 .metadata/.bak_0.log create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/0/b052507c0e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/10/d0e4ec032387001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/11/e01f2e4b2287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/15/5014e4bc2287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/17/507a5da62287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/19/50c4f47b2087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1a/b04e3d72168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1a/c0bedf60e640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1d/40013c152287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1d/709a3bde2d53001516cdaaef55e27ba4 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/606a09eede40001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/1e/d0e4168be540001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2/008fa000f34500151ebce83b3129f79d create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/20/802a22d2de40001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/21/40187b959b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/21/c0a02994e640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/22/40feff6ce640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/25/4082086f2087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/25/c05ce792e640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/26/20c757a6168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/28/a02aeb89168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/29/40e1da43e340001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/29/50338b22e340001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2b/20adfe8f138b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2b/702271ffde40001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2c/209f3c7b168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2d/b05650032387001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/30/60f899dc2d53001516cdaaef55e27ba4 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/31/20f593fb158b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/31/b04c406a0e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/32/40c22aa12287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/32/a09be810128b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/32/a0c729e6158b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/34/30320daa0f8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/34/509e3a962287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/34/60480de22187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/35/d0edb6ae2287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/37/a0d4af822187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/37/c0f63c61e240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/38/5089bf762287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/38/e08c48b99a8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3b/b0717c88118b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3c/d00a0e58e240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3e/6022916ee240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3f/606d4a802187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3f/b0d12138168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/3f/c0cb3f450e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4/d0391ad32187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/40/5022d9fb2187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/41/c0bb756d9b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/41/e0ddf8b42087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/45/d00b6c840c8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/46/50ec87042387001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/46/d0c39d6c2087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/47/509b62022387001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/48/b0715a760e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4a/c036c9a02187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4b/40b1bfa8755d001515f3fd278c34f57e create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4c/e09817299b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4d/c0d5180e2087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/4e/40170f730e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/51/408cc87e9b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/53/40b494f5e540001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/53/d0c1dad6e440001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/57/2084190f168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5b/008c7edd2d53001516cdaaef55e27ba4 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5b/e0d83cf9de40001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5d/30629c52168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5e/c0d6d38be640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/5f/50257859e640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6/3059a485168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6/50be8b389b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/60/c08d9b862187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/61/b05b2a30138b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/63/d06551420941001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/65/50f69b6c168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/67/c0952ea8e240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6a/406f8416e340001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6b/700669952d53001516cdaaef55e27ba4 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6b/c000fac32187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6c/506c7d4ee140001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6c/b03244ed9a8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6e/60f4f3db2d53001516cdaaef55e27ba4 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6e/d0c7e2022387001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/6f/d0569c5ae240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/75/00578f8b118b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/78/b0ba5a02168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/79/40cb73222287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7a/d040fb952187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7c/d028e4369b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7e/407c9a362287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8/303bccc40e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/80/506d6dc22187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/85/401c3763e640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8d/e0f3df742287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8e/d06563122287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/8f/f041e4b79a8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/90/c0d422e92287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/93/5044523e0e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/96/206d0ff9158b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/97/c037f44de440001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/97/d0c07d01198b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/97/f0a3a5f1de40001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/98/4037ffce9b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/98/502802722287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9a/e08e32dd2d53001516cdaaef55e27ba4 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9b/50bd8c072287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9e/206f5678168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/9f/40b3b3122387001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a1/40b13fdfb94400151637bde96975c236 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a4/30f2b3fa118b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a5/102ab363e640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a6/306d822d138b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a8/4016faaee240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a9/a0007674168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a9/c09d79ad2087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ab/c07bf623e640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ac/50a4ecaae240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ad/b067a2dd2d53001516cdaaef55e27ba4 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ad/d005e8c02187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ad/e01e43fdde40001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ae/d01c7740e340001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/af/60ef08a60c8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b/707985099b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b2/d06fefa82287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b3/30deaf0b148b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b3/50a8a0439b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b3/f0d62592e540001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b5/e01fc9c92187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b6/30123c0f148b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b7/a0b1e23b138b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b9/5008fb862087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/b9/c0ad8e3ee340001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bb/506865c02187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/bb/708754aee240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/be/f0ff0a082087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c3/207c49a0168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c3/40771d08e740001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c4/b03fc23d168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c4/c09467ba168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c5/40ffd3b49b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c8/2017ffab0f8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c8/a0c64fa50e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c9/30f44f45158b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c9/d021561d2287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ca/30f9fabe0e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cd/30833796168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/cd/502cf23c2287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d/40ebea47e340001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d0/405b2dafe240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d0/d0f74b8de640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d0/f0f48766e640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d1/50736f002287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d2/50685e70e240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d4/b0879008128b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d4/c05ee3692087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d5/d08253be2287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d5/d0e71dc1e140001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d8/4044c9a7e240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/d9/40a17a9f2287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/da/c0b4ceef2187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/da/c0e99ca62187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/db/50afb721e640001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e1/a094698b138b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e2/c05167a80c8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e2/d01dd49f2087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e3/d0df3dbadf40001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e5/c05785819a8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e7/507343312287001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e7/d014d3062387001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e9/504e12aee240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e9/c0b3154ce440001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ea/b0d0b526128b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ed/e0c5e59d2187001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ed/f00520bce240001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ee/b0b0b2700e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f/d05bb3872087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f0/2032f0a2168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f4/409165a82087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f4/b0f896bf9b8c0015169bb4f96b251538 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f4/d060adb52087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f5/60e49bf5de40001514c09dece48b36c7 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f6/2099de87138b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f8/b0609ebb0e8b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f9/408378442087001519af89c6c0264943 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fb/a04766fe188b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/fc/20df70b6168b00151149b99c05b1b975 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ff/d02051bc0c8b00151149b99c05b1b975 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/.indexes/properties.index 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/.root/71.tree create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.snap create mode 100644 .metadata/.plugins/org.eclipse.jdt.core/50372563.index create mode 100644 .metadata/.plugins/org.eclipse.jdt.core/678131303.index create mode 100644 .metadata/.plugins/org.eclipse.jdt.core/indexNamesMap.txt 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.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/35/refactorings.history create mode 100644 .metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/35/refactorings.index create mode 100644 .metadata/.plugins/org.eclipse.mylyn.tasks.ui/dialog_settings.xml create mode 100644 .metadata/.plugins/org.eclipse.team.cvs.core/.running create mode 100644 TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/AnnouncerThread.class create mode 100644 TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerJoinTimerTask.class create mode 100644 TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener$1.class create mode 100644 TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener$2.class create mode 100644 TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain$2.class diff --git a/.metadata/.bak_0.log b/.metadata/.bak_0.log new file mode 100644 index 0000000..0e4f2ac --- /dev/null +++ b/.metadata/.bak_0.log @@ -0,0 +1,14027 @@ +!SESSION 2015-07-15 15:24:45.371 ----------------------------------------------- +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 -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -data D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.egit.ui 2 0 2015-07-15 15:25:41.331 +!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-15 15:25:41.332 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-07-19 09:02:01.096 ----------------------------------------------- +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-19 09:03:46.155 +!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-19 09:03:46.219 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-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) +!SESSION 2015-07-27 17:30:41.381 ----------------------------------------------- +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-27 17:31:56.400 +!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-27 17:31:56.421 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-08 18:30:00.907 ----------------------------------------------- +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 -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -data D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.egit.ui 2 0 2015-08-08 18:30:23.469 +!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-08-08 18:30:23.581 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface 2 0 2015-08-08 20:21:36.761 +!MESSAGE Keybinding conflicts occurred. They may interfere with normal accelerator operation. +!SUBENTRY 1 org.eclipse.jface 2 0 2015-08-08 20:21:36.761 +!MESSAGE A conflict occurred for ALT+SHIFT+ARROW_DOWN: +Binding(ALT+SHIFT+ARROW_DOWN, + ParameterizedCommand(Command(org.eclipse.jdt.ui.edit.text.java.select.last,Restore Last Selection, + Restore last selection, + Category(org.eclipse.ui.category.edit,Edit,null,true), + org.eclipse.ui.internal.MakeHandlersGo@7ce87f9d, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.jdt.ui.javaEditorScope,,,system) +Binding(ALT+SHIFT+ARROW_DOWN, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.markTaskReadGoToNextUnread,Mark Task Read and Go To Next Unread Task, + , + Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), + org.eclipse.ui.internal.MakeHandlersGo@e944541, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +!SUBENTRY 1 org.eclipse.jface 2 0 2015-08-08 20:21:36.761 +!MESSAGE A conflict occurred for ALT+ARROW_DOWN: +Binding(ALT+ARROW_DOWN, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.goToNextUnread,Go To Next Unread Task, + , + Category(org.eclipse.ui.category.navigate,Navigate,null,true), + org.eclipse.ui.internal.MakeHandlersGo@6198e9b5, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +Binding(ALT+ARROW_DOWN, + ParameterizedCommand(Command(org.eclipse.ui.edit.text.moveLineDown,Move Lines Down, + Moves the selected lines down, + Category(org.eclipse.ui.category.textEditor,Text Editing,Text Editing Commands,true), + org.eclipse.ui.internal.MakeHandlersGo@1c89cec5, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.ui.textEditorScope,,,system) +!SUBENTRY 1 org.eclipse.jface 2 0 2015-08-08 20:21:36.761 +!MESSAGE A conflict occurred for ALT+SHIFT+ARROW_UP: +Binding(ALT+SHIFT+ARROW_UP, + ParameterizedCommand(Command(org.eclipse.jdt.ui.edit.text.java.select.enclosing,Select Enclosing Element, + Expand selection to include enclosing element, + Category(org.eclipse.ui.category.edit,Edit,null,true), + org.eclipse.ui.internal.MakeHandlersGo@1447bef2, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.jdt.ui.javaEditorScope,,,system) +Binding(ALT+SHIFT+ARROW_UP, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.markTaskReadGoToPreviousUnread,Mark Task Read and Go To Previous Unread Task, + , + Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), + org.eclipse.ui.internal.MakeHandlersGo@2b6c3f70, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +!SUBENTRY 1 org.eclipse.jface 2 0 2015-08-08 20:21:36.761 +!MESSAGE A conflict occurred for ALT+SHIFT+U: +Binding(ALT+SHIFT+U, + ParameterizedCommand(Command(org.eclipse.jdt.ui.edit.text.remove.occurrence.annotations,Remove Occurrence Annotations, + Removes the occurrence annotations from the current editor, + Category(org.eclipse.jdt.ui.category.source,Source,Java Source Actions,true), + org.eclipse.ui.internal.MakeHandlersGo@77ec911, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.jdt.ui.javaEditorScope,,,system) +Binding(ALT+SHIFT+U, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.markTaskUnread,Mark Task Unread, + , + Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), + org.eclipse.ui.internal.MakeHandlersGo@55d3c0dd, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +!SUBENTRY 1 org.eclipse.jface 2 0 2015-08-08 20:21:36.761 +!MESSAGE A conflict occurred for INSERT: +Binding(INSERT, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.new.local.task,New Local Task, + , + Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), + org.eclipse.ui.internal.MakeHandlersGo@7c4a44bb, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +Binding(INSERT, + ParameterizedCommand(Command(org.eclipse.ui.edit.text.toggleOverwrite,Toggle Overwrite, + Toggle overwrite mode, + Category(org.eclipse.ui.category.textEditor,Text Editing,Text Editing Commands,true), + org.eclipse.ui.internal.MakeHandlersGo@369773fd, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.ui.textEditorScope,,,system) +!SUBENTRY 1 org.eclipse.jface 2 0 2015-08-08 20:21:36.761 +!MESSAGE A conflict occurred for ALT+ARROW_UP: +Binding(ALT+ARROW_UP, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.goToPreviousUnread,Go To Previous Unread Task, + , + Category(org.eclipse.ui.category.navigate,Navigate,null,true), + org.eclipse.ui.internal.MakeHandlersGo@5d7399f9, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +Binding(ALT+ARROW_UP, + ParameterizedCommand(Command(org.eclipse.ui.edit.text.moveLineUp,Move Lines Up, + Moves the selected lines up, + Category(org.eclipse.ui.category.textEditor,Text Editing,Text Editing Commands,true), + org.eclipse.ui.internal.MakeHandlersGo@47d0127f, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.ui.textEditorScope,,,system) +!SESSION 2015-08-08 22:18:57.768 ----------------------------------------------- +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-08-08 22:19:31.422 +!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-08-08 22:19:31.528 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-09 02:28:26.809 ----------------------------------------------- +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-08-09 02:29:00.097 +!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-08-09 02:29:00.163 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-09 12:44:08.125 ----------------------------------------------- +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-08-09 12:44:49.818 +!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-08-09 12:44:49.857 +!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.jdt.core 4 4 2015-08-09 16:10:06.274 +!MESSAGE JavaBuilder handling CoreException +!STACK 1 +org.eclipse.core.runtime.CoreException: Could not write file: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class. + at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:397) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:1101) + at org.eclipse.core.internal.resources.File.internalSetContents(File.java:321) + at org.eclipse.core.internal.resources.File.setContents(File.java:360) + at org.eclipse.core.internal.resources.File.setContents(File.java:464) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.writeClassFileContents(IncrementalImageBuilder.java:835) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.writeClassFile(AbstractImageBuilder.java:857) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.acceptResult(AbstractImageBuilder.java:188) + at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:510) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:365) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.compile(IncrementalImageBuilder.java:329) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:302) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:134) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Caused by: java.io.FileNotFoundException: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class (A folyamat nem fér hozzá a fájlhoz, mert azt egy másik folyamat használja) + at java.io.FileOutputStream.open0(Native Method) + at java.io.FileOutputStream.open(Unknown Source) + at java.io.FileOutputStream.(Unknown Source) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:388) + ... 26 more +!SUBENTRY 1 org.eclipse.core.filesystem 4 272 2015-08-09 16:10:06.403 +!MESSAGE Could not write file: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class. +!STACK 0 +java.io.FileNotFoundException: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class (A folyamat nem fér hozzá a fájlhoz, mert azt egy másik folyamat használja) + at java.io.FileOutputStream.open0(Native Method) + at java.io.FileOutputStream.open(Unknown Source) + at java.io.FileOutputStream.(Unknown Source) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:388) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:1101) + at org.eclipse.core.internal.resources.File.internalSetContents(File.java:321) + at org.eclipse.core.internal.resources.File.setContents(File.java:360) + at org.eclipse.core.internal.resources.File.setContents(File.java:464) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.writeClassFileContents(IncrementalImageBuilder.java:835) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.writeClassFile(AbstractImageBuilder.java:857) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.acceptResult(AbstractImageBuilder.java:188) + at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:510) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:365) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.compile(IncrementalImageBuilder.java:329) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:302) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:134) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jdt.core 4 4 2015-08-09 16:10:06.407 +!MESSAGE JavaBuilder handling ImageBuilderInternalException while building: TheButtonAutoFlair +!STACK 1 +org.eclipse.core.internal.resources.ResourceException: Problems encountered while deleting resources. + at org.eclipse.core.internal.resources.Resource.delete(Resource.java:816) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeClassFile(IncrementalImageBuilder.java:757) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeSecondaryTypes(IncrementalImageBuilder.java:770) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:135) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Contains: Could not delete 'D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class'. +org.eclipse.core.runtime.CoreException: Problems encountered while deleting files. + at org.eclipse.core.internal.filesystem.local.LocalFile.delete(LocalFile.java:131) + at org.eclipse.core.internal.resources.ResourceTree.internalDeleteFile(ResourceTree.java:304) + at org.eclipse.core.internal.resources.ResourceTree.standardDeleteFile(ResourceTree.java:785) + at org.eclipse.core.internal.resources.Resource.unprotectedDelete(Resource.java:1973) + at org.eclipse.core.internal.resources.Resource.delete(Resource.java:803) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeClassFile(IncrementalImageBuilder.java:757) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeSecondaryTypes(IncrementalImageBuilder.java:770) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:135) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class. +!SUBENTRY 1 org.eclipse.core.resources 4 273 2015-08-09 16:10:06.408 +!MESSAGE Problems encountered while deleting resources. +!SUBENTRY 2 org.eclipse.core.resources 4 273 2015-08-09 16:10:06.408 +!MESSAGE Could not delete 'D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class'. +!STACK 1 +org.eclipse.core.runtime.CoreException: Problems encountered while deleting files. + at org.eclipse.core.internal.filesystem.local.LocalFile.delete(LocalFile.java:131) + at org.eclipse.core.internal.resources.ResourceTree.internalDeleteFile(ResourceTree.java:304) + at org.eclipse.core.internal.resources.ResourceTree.standardDeleteFile(ResourceTree.java:785) + at org.eclipse.core.internal.resources.Resource.unprotectedDelete(Resource.java:1973) + at org.eclipse.core.internal.resources.Resource.delete(Resource.java:803) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeClassFile(IncrementalImageBuilder.java:757) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeSecondaryTypes(IncrementalImageBuilder.java:770) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:135) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class. +!SUBENTRY 3 org.eclipse.core.filesystem 4 273 2015-08-09 16:10:06.408 +!MESSAGE Problems encountered while deleting files. +!SUBENTRY 4 org.eclipse.core.filesystem 4 273 2015-08-09 16:10:06.408 +!MESSAGE Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class. + +!ENTRY org.eclipse.jdt.core 4 4 2015-08-09 16:10:11.009 +!MESSAGE JavaBuilder handling ImageBuilderInternalException while building: TheButtonAutoFlair +!STACK 1 +org.eclipse.core.internal.resources.ResourceException: Problems encountered while deleting resources. + at org.eclipse.core.internal.resources.Resource.delete(Resource.java:816) + at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.cleanOutputFolders(BatchImageBuilder.java:114) + at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:46) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:178) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Contains: Could not delete '/TheButtonAutoFlair/bin/tk'. +org.eclipse.core.internal.resources.ResourceException: Problems encountered while deleting resources. + at org.eclipse.core.internal.localstore.FileSystemResourceManager.delete(FileSystemResourceManager.java:352) + at org.eclipse.core.internal.resources.ResourceTree.internalDeleteFolder(ResourceTree.java:352) + at org.eclipse.core.internal.resources.ResourceTree.standardDeleteFolder(ResourceTree.java:798) + at org.eclipse.core.internal.resources.Resource.unprotectedDelete(Resource.java:1977) + at org.eclipse.core.internal.resources.Resource.delete(Resource.java:803) + at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.cleanOutputFolders(BatchImageBuilder.java:114) + at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:46) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:178) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Contains: Problems encountered while deleting files. +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class. +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair. +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp. +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk. +!SUBENTRY 1 org.eclipse.core.resources 4 273 2015-08-09 16:10:11.009 +!MESSAGE Problems encountered while deleting resources. +!SUBENTRY 2 org.eclipse.core.resources 4 273 2015-08-09 16:10:11.010 +!MESSAGE Could not delete '/TheButtonAutoFlair/bin/tk'. +!STACK 1 +org.eclipse.core.internal.resources.ResourceException: Problems encountered while deleting resources. + at org.eclipse.core.internal.localstore.FileSystemResourceManager.delete(FileSystemResourceManager.java:352) + at org.eclipse.core.internal.resources.ResourceTree.internalDeleteFolder(ResourceTree.java:352) + at org.eclipse.core.internal.resources.ResourceTree.standardDeleteFolder(ResourceTree.java:798) + at org.eclipse.core.internal.resources.Resource.unprotectedDelete(Resource.java:1977) + at org.eclipse.core.internal.resources.Resource.delete(Resource.java:803) + at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.cleanOutputFolders(BatchImageBuilder.java:114) + at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:46) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:178) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Contains: Problems encountered while deleting files. +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class. +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair. +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp. +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk. +!SUBENTRY 3 org.eclipse.core.resources 4 273 2015-08-09 16:10:11.010 +!MESSAGE Problems encountered while deleting resources. +!SUBENTRY 4 org.eclipse.core.filesystem 4 273 2015-08-09 16:10:11.010 +!MESSAGE Problems encountered while deleting files. +!SUBENTRY 5 org.eclipse.core.filesystem 4 273 2015-08-09 16:10:11.010 +!MESSAGE Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\PluginMain.class. +!SUBENTRY 5 org.eclipse.core.filesystem 4 273 2015-08-09 16:10:11.010 +!MESSAGE Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair. +!SUBENTRY 5 org.eclipse.core.filesystem 4 273 2015-08-09 16:10:11.010 +!MESSAGE Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp. +!SUBENTRY 5 org.eclipse.core.filesystem 4 273 2015-08-09 16:10:11.010 +!MESSAGE Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk. +!SESSION 2015-08-09 20:56:55.150 ----------------------------------------------- +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-08-09 20:58:12.223 +!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-08-09 20:58:12.224 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-09 22:48:23.020 ----------------------------------------------- +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.core.resources 2 10035 2015-08-09 22:49:53.071 +!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. + +!ENTRY org.eclipse.egit.ui 2 0 2015-08-09 22:53:15.430 +!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-08-09 22:53:15.431 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-10 07:20:59.956 ----------------------------------------------- +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-08-10 07:22:18.883 +!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-08-10 07:22:18.926 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-10 20:02:07.739 ----------------------------------------------- +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-08-10 20:02:46.475 +!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-08-10 20:02:46.519 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-10 22:52:51.487 ----------------------------------------------- +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-08-10 22:54:02.021 +!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-08-10 22:54:02.065 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-12 12:32:27.604 ----------------------------------------------- +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-08-12 12:38:42.082 +!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-08-12 12:38:42.125 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-14 12:09:07.199 ----------------------------------------------- +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.core.resources 2 10035 2015-08-14 12:09:27.930 +!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. + +!ENTRY org.eclipse.osgi 4 0 2015-08-14 12:10:15.826 +!MESSAGE Application error +!STACK 1 +org.eclipse.swt.SWTError: No more handles + at org.eclipse.swt.SWT.error(SWT.java:4387) + at org.eclipse.swt.SWT.error(SWT.java:4276) + at org.eclipse.swt.SWT.error(SWT.java:4247) + at org.eclipse.swt.widgets.Widget.error(Widget.java:468) + at org.eclipse.swt.widgets.Control.createHandle(Control.java:704) + at org.eclipse.swt.widgets.Composite.createHandle(Composite.java:305) + at org.eclipse.swt.widgets.Control.createWidget(Control.java:744) + at org.eclipse.swt.widgets.Scrollable.createWidget(Scrollable.java:134) + at org.eclipse.swt.widgets.Control.(Control.java:112) + at org.eclipse.swt.widgets.Scrollable.(Scrollable.java:75) + at org.eclipse.swt.widgets.Composite.(Composite.java:95) + at org.eclipse.ui.splash.BasicSplashHandler.getBundleProgressMonitor(BasicSplashHandler.java:159) + at org.eclipse.ui.splash.BasicSplashHandler.getContent(BasicSplashHandler.java:265) + at org.eclipse.ui.internal.splash.EclipseSplashHandler.init(EclipseSplashHandler.java:91) + at org.eclipse.ui.internal.Workbench$6.run(Workbench.java:751) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.Workbench.createSplashWrapper(Workbench.java:772) + at org.eclipse.ui.internal.Workbench.access$5(Workbench.java:690) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:568) + 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) +!SESSION 2015-08-14 12:09:07.186 ----------------------------------------------- +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.core.resources 2 10035 2015-08-14 12:15:27.853 +!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. + +!ENTRY org.eclipse.egit.ui 2 0 2015-08-14 12:16:14.774 +!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-08-14 12:16:14.774 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-14 14:45:00.284 ----------------------------------------------- +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-08-14 14:46:01.842 +!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-08-14 14:46:02.106 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-17 10:02:15.483 ----------------------------------------------- +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-08-17 10:02:46.235 +!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-08-17 10:02:46.268 +!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.jdt.core 4 4 2015-08-17 10:16:13.602 +!MESSAGE JavaBuilder handling CoreException +!STACK 1 +org.eclipse.core.runtime.CoreException: Could not write file: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\Commands.class. + at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:397) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:1101) + at org.eclipse.core.internal.resources.File.internalSetContents(File.java:321) + at org.eclipse.core.internal.resources.File.setContents(File.java:360) + at org.eclipse.core.internal.resources.File.setContents(File.java:464) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.writeClassFileContents(IncrementalImageBuilder.java:835) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.writeClassFile(AbstractImageBuilder.java:857) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.acceptResult(AbstractImageBuilder.java:188) + at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:510) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:365) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.compile(IncrementalImageBuilder.java:329) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:302) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:134) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Caused by: java.io.FileNotFoundException: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\Commands.class (A folyamat nem fér hozzá a fájlhoz, mert azt egy másik folyamat használja) + at java.io.FileOutputStream.open0(Native Method) + at java.io.FileOutputStream.open(Unknown Source) + at java.io.FileOutputStream.(Unknown Source) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:388) + ... 26 more +!SUBENTRY 1 org.eclipse.core.filesystem 4 272 2015-08-17 10:16:13.654 +!MESSAGE Could not write file: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\Commands.class. +!STACK 0 +java.io.FileNotFoundException: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\Commands.class (A folyamat nem fér hozzá a fájlhoz, mert azt egy másik folyamat használja) + at java.io.FileOutputStream.open0(Native Method) + at java.io.FileOutputStream.open(Unknown Source) + at java.io.FileOutputStream.(Unknown Source) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:388) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:1101) + at org.eclipse.core.internal.resources.File.internalSetContents(File.java:321) + at org.eclipse.core.internal.resources.File.setContents(File.java:360) + at org.eclipse.core.internal.resources.File.setContents(File.java:464) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.writeClassFileContents(IncrementalImageBuilder.java:835) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.writeClassFile(AbstractImageBuilder.java:857) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.acceptResult(AbstractImageBuilder.java:188) + at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:510) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:365) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.compile(IncrementalImageBuilder.java:329) + at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:302) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:134) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jdt.core 4 4 2015-08-17 10:16:13.690 +!MESSAGE JavaBuilder handling ImageBuilderInternalException while building: TheButtonAutoFlair +!STACK 1 +org.eclipse.core.internal.resources.ResourceException: Problems encountered while deleting resources. + at org.eclipse.core.internal.resources.Resource.delete(Resource.java:816) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeClassFile(IncrementalImageBuilder.java:757) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeSecondaryTypes(IncrementalImageBuilder.java:770) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:135) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Contains: Could not delete 'D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\Commands.class'. +org.eclipse.core.runtime.CoreException: Problems encountered while deleting files. + at org.eclipse.core.internal.filesystem.local.LocalFile.delete(LocalFile.java:131) + at org.eclipse.core.internal.resources.ResourceTree.internalDeleteFile(ResourceTree.java:304) + at org.eclipse.core.internal.resources.ResourceTree.standardDeleteFile(ResourceTree.java:785) + at org.eclipse.core.internal.resources.Resource.unprotectedDelete(Resource.java:1973) + at org.eclipse.core.internal.resources.Resource.delete(Resource.java:803) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeClassFile(IncrementalImageBuilder.java:757) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeSecondaryTypes(IncrementalImageBuilder.java:770) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:135) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\Commands.class. +!SUBENTRY 1 org.eclipse.core.resources 4 273 2015-08-17 10:16:13.691 +!MESSAGE Problems encountered while deleting resources. +!SUBENTRY 2 org.eclipse.core.resources 4 273 2015-08-17 10:16:13.691 +!MESSAGE Could not delete 'D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\Commands.class'. +!STACK 1 +org.eclipse.core.runtime.CoreException: Problems encountered while deleting files. + at org.eclipse.core.internal.filesystem.local.LocalFile.delete(LocalFile.java:131) + at org.eclipse.core.internal.resources.ResourceTree.internalDeleteFile(ResourceTree.java:304) + at org.eclipse.core.internal.resources.ResourceTree.standardDeleteFile(ResourceTree.java:785) + at org.eclipse.core.internal.resources.Resource.unprotectedDelete(Resource.java:1973) + at org.eclipse.core.internal.resources.Resource.delete(Resource.java:803) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeClassFile(IncrementalImageBuilder.java:757) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.removeSecondaryTypes(IncrementalImageBuilder.java:770) + at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:135) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:265) + at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:193) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Contains: Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\Commands.class. +!SUBENTRY 3 org.eclipse.core.filesystem 4 273 2015-08-17 10:16:13.691 +!MESSAGE Problems encountered while deleting files. +!SUBENTRY 4 org.eclipse.core.filesystem 4 273 2015-08-17 10:16:13.691 +!MESSAGE Could not delete: D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\TheButtonAutoFlair\bin\tk\sznp\thebuttonautoflair\Commands.class. +!SESSION 2015-08-20 00:04:03.836 ----------------------------------------------- +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-08-20 00:04:39.002 +!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-08-20 00:04:39.076 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-20 12:03:37.735 ----------------------------------------------- +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-08-20 12:04:30.018 +!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-08-20 12:04:30.041 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-21 17:16:18.124 ----------------------------------------------- +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 -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -data D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.egit.ui 2 0 2015-08-21 17:16:33.522 +!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-08-21 17:16:33.559 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-22 17:26:16.114 ----------------------------------------------- +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 -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -data D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.egit.ui 2 0 2015-08-22 17:26:38.355 +!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-08-22 17:26:38.382 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-23 17:16:55.833 ----------------------------------------------- +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.osgi 4 0 2015-08-23 17:17:21.079 +!MESSAGE Application error +!STACK 1 +org.eclipse.swt.SWTError: No more handles + at org.eclipse.swt.SWT.error(SWT.java:4387) + at org.eclipse.swt.SWT.error(SWT.java:4276) + at org.eclipse.swt.SWT.error(SWT.java:4247) + at org.eclipse.swt.widgets.Widget.error(Widget.java:468) + at org.eclipse.swt.widgets.Control.createHandle(Control.java:704) + at org.eclipse.swt.widgets.Composite.createHandle(Composite.java:305) + at org.eclipse.swt.widgets.Control.createWidget(Control.java:744) + at org.eclipse.swt.widgets.Scrollable.createWidget(Scrollable.java:134) + at org.eclipse.swt.widgets.Control.(Control.java:112) + at org.eclipse.swt.widgets.Scrollable.(Scrollable.java:75) + at org.eclipse.swt.widgets.Composite.(Composite.java:95) + at org.eclipse.ui.splash.BasicSplashHandler.getBundleProgressMonitor(BasicSplashHandler.java:159) + at org.eclipse.ui.splash.BasicSplashHandler.getContent(BasicSplashHandler.java:265) + at org.eclipse.ui.internal.splash.EclipseSplashHandler.init(EclipseSplashHandler.java:91) + at org.eclipse.ui.internal.Workbench$6.run(Workbench.java:751) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.Workbench.createSplashWrapper(Workbench.java:772) + at org.eclipse.ui.internal.Workbench.access$5(Workbench.java:690) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:568) + 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) +!SESSION 2015-08-25 11:30:37.334 ----------------------------------------------- +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-08-25 11:35:58.463 +!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-08-25 11:35:58.581 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-28 18:27:09.642 ----------------------------------------------- +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-08-28 18:27:44.185 +!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-08-28 18:27:44.219 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-28 23:51:11.384 ----------------------------------------------- +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-08-28 23:57:53.688 +!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-08-28 23:57:53.746 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-29 00:29:53.463 ----------------------------------------------- +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-08-29 00:30:27.902 +!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-08-29 00:30:27.923 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-29 01:06:11.273 ----------------------------------------------- +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-08-29 01:07:26.560 +!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-08-29 01:07:26.561 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-30 16:04:35.297 ----------------------------------------------- +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-08-30 16:05:17.135 +!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-08-30 16:05:17.232 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-30 19:48:08.774 ----------------------------------------------- +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-08-30 19:51:13.709 +!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-08-30 19:51:13.842 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-31 08:13:33.839 ----------------------------------------------- +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-08-31 08:16:17.239 +!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-08-31 08:16:17.347 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-31 18:08:04.953 ----------------------------------------------- +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-08-31 18:09:58.906 +!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-08-31 18:09:58.979 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-03 16:29:43.152 ----------------------------------------------- +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-09-03 16:30:18.323 +!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-09-03 16:30:18.372 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-04 14:00:12.250 ----------------------------------------------- +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-09-04 14:01:05.693 +!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-09-04 14:01:05.942 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-05 09:20:53.186 ----------------------------------------------- +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.core.resources 2 10035 2015-09-05 09:21:02.434 +!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. + +!ENTRY org.eclipse.egit.ui 2 0 2015-09-05 09:21:32.770 +!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-09-05 09:21:32.771 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-05 20:05:26.954 ----------------------------------------------- +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-09-05 20:06:04.350 +!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-09-05 20:06:04.444 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-05 22:11:43.331 ----------------------------------------------- +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-09-05 22:12:41.008 +!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-09-05 22:12:41.084 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-06 18:49:03.989 ----------------------------------------------- +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-09-06 18:49:40.216 +!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-09-06 18:49:40.334 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-08 20:18:08.446 ----------------------------------------------- +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-09-08 20:18:46.444 +!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-09-08 20:18:46.484 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-08 21:24:42.383 ----------------------------------------------- +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-09-08 21:25:10.913 +!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-09-08 21:25:10.914 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-10 18:07:55.439 ----------------------------------------------- +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-09-10 18:09:02.223 +!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-09-10 18:09:02.274 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-10 20:16:53.544 ----------------------------------------------- +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-09-10 20:17:18.126 +!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-09-10 20:17:18.185 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-11 20:36:45.728 ----------------------------------------------- +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-09-11 20:39:01.690 +!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-09-11 20:39:01.994 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-15 17:19:32.373 ----------------------------------------------- +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-09-15 17:19:55.932 +!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-09-15 17:19:55.984 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-16 21:03:23.492 ----------------------------------------------- +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-09-16 21:04:01.764 +!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-09-16 21:04:01.863 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-17 21:43:10.651 ----------------------------------------------- +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-09-17 21:43:42.909 +!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-09-17 21:43:43.002 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-18 18:49:00.664 ----------------------------------------------- +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-09-18 18:50:30.284 +!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-09-18 18:50:30.329 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-18 19:06:28.828 ----------------------------------------------- +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-09-18 19:07:05.400 +!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-09-18 19:07:05.571 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 4 0 2015-09-18 19:19:30.132 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-09-18 19:19:32.170 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-09-18 19:19:34.054 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-09-18 19:19:35.971 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-09-18 19:19:41.481 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:19:49.113 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:00.245 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:00.832 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:00.996 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:01.224 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:01.325 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:01.492 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:01.719 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:05.558 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:05.967 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:06.473 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:06.679 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:06.833 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:06.885 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:06.959 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:07.339 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:07.384 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:07.856 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:08.057 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:08.337 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:15.950 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:16.684 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:16.772 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:16.834 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:16.906 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:16.999 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:17.199 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:17.404 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:17.756 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:17.913 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:18.413 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:22.219 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:36.754 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:37.254 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:37.511 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:37.754 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:37.842 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:38.019 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:38.234 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:38.321 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:38.443 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:38.619 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:39.292 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:40.403 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:41.287 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:41.599 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:41.666 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:42.199 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:42.626 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:42.656 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:42.776 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:42.801 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:42.991 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:43.088 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:43.916 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:44.256 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:44.316 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:44.507 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:44.782 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:44.801 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:45.044 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:45.196 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:45.325 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:45.631 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:45.916 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:46.087 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:46.094 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:46.449 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:46.566 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:47.029 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:47.474 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:47.769 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:48.199 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:48.206 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:48.502 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:48.535 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:48.942 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:49.087 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:49.236 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:49.480 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:49.506 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:49.615 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:49.691 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:49.882 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:49.957 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:50.107 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:50.365 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:50.411 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:50.609 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:50.776 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:50.990 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:51.122 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:51.985 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:52.421 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:52.672 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:20:52.797 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:42:24.699 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:42:54.148 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:43:56.127 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:43:56.453 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:53:55.395 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:53:56.595 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 19:54:38.866 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 20:20:39.229 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 20:20:39.777 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 20:20:42.797 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-18 20:20:43.791 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-09-18 20:28:16.899 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-09-18 20:35:13.248 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) +!SESSION 2015-09-18 22:00:20.813 ----------------------------------------------- +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-09-18 22:00:56.494 +!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-09-18 22:00:56.572 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-19 12:20:00.519 ----------------------------------------------- +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-09-19 12:20:37.615 +!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-09-19 12:20:37.640 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 2 0 2015-09-19 12:25:13.250 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-19 12:25:13.440 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-19 12:26:27.686 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-19 12:26:30.002 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-19 12:26:31.494 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +!SESSION 2015-09-19 18:53:05.859 ----------------------------------------------- +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-09-19 18:53:35.522 +!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-09-19 18:53:35.565 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-19 23:36:22.230 ----------------------------------------------- +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-09-19 23:36:57.792 +!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-09-19 23:36:57.823 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-20 10:53:24.590 ----------------------------------------------- +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.equinox.app 4 2 2015-09-20 10:54:51.309 +!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.equinox.app". +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4361) + at org.eclipse.swt.SWT.error(SWT.java:4276) + at org.eclipse.swt.SWT.error(SWT.java:4247) + at org.eclipse.swt.widgets.Widget.error(Widget.java:468) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340) + at org.eclipse.swt.widgets.Shell.close(Shell.java:537) + at org.eclipse.ui.splash.AbstractSplashHandler.dispose(AbstractSplashHandler.java:63) + at org.eclipse.ui.splash.BasicSplashHandler.dispose(BasicSplashHandler.java:191) + at org.eclipse.ui.internal.Workbench$6$1.applicationRunning(Workbench.java:731) + at org.eclipse.equinox.internal.app.EclipseAppHandle$1.run(EclipseAppHandle.java:268) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.applicationRunning(EclipseAppHandle.java:258) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1001) + 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.egit.ui 2 0 2015-09-20 10:54:57.937 +!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-09-20 10:54:57.937 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-21 19:44:13.631 ----------------------------------------------- +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-09-21 19:46:55.767 +!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-09-21 19:46:55.961 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-09-30 20:07:37.281 ----------------------------------------------- +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 -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -data D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.egit.ui 2 0 2015-09-30 20:07:54.147 +!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-09-30 20:07:54.366 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:33.709 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:33.903 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:34.077 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryField.getAttachedJavadoc(BinaryField.java:121) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:34.250 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:34.449 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:34.626 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:36.500 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:36.672 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:36.681 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:37.286 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-09-30 20:17:37.408 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +!SESSION 2015-10-02 22:57:41.971 ----------------------------------------------- +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-10-02 22:58:39.814 +!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-10-02 22:58:40.000 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:33:35.390 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:35:41.163 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:35:52.245 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:35:53.083 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:36:45.673 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:20.683 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:23.066 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:23.756 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:25.549 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:27.398 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:27.830 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:28.099 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:28.232 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:29.919 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:33.709 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:35.922 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:37.352 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:38:39.146 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:39:45.327 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:39:46.145 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:39:48.435 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:39:49.298 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:39:50.992 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:40:17.719 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-02 23:40:18.254 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jdt.ui 4 10001 2015-10-02 23:50:15.389 +!MESSAGE Internal Error +!STACK 0 +java.lang.reflect.InvocationTargetException + at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421) + at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1028) + at org.eclipse.jdt.internal.ui.jarpackager.JarPackageWizard.executeExportOperation(JarPackageWizard.java:167) + at org.eclipse.jdt.internal.ui.jarpackager.JarPackageWizard.performFinish(JarPackageWizard.java:270) + at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:827) + at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:432) + at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.eclipse.ui.internal.handlers.WizardHandler$Export.executeHandler(WizardHandler.java:103) + at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:279) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:290) + at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:76) + at sun.reflect.GeneratedMethodAccessor23.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.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:515) + at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:157) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) + at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) + at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758) + at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop(EventLoopProgressMonitor.java:123) + at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.internalWorked(EventLoopProgressMonitor.java:90) + at org.eclipse.core.runtime.ProgressMonitorWrapper.internalWorked(ProgressMonitorWrapper.java:94) + at org.eclipse.core.runtime.SubProgressMonitor.internalWorked(SubProgressMonitor.java:155) + at org.eclipse.core.runtime.SubProgressMonitor.worked(SubProgressMonitor.java:181) + at org.eclipse.core.runtime.SubMonitor$RootInfo.worked(SubMonitor.java:284) + at org.eclipse.core.runtime.SubMonitor.internalWorked(SubMonitor.java:570) + at org.eclipse.core.runtime.ProgressMonitorWrapper.internalWorked(ProgressMonitorWrapper.java:94) + at org.eclipse.core.runtime.SubProgressMonitor.internalWorked(SubProgressMonitor.java:155) + at org.eclipse.core.runtime.ProgressMonitorWrapper.internalWorked(ProgressMonitorWrapper.java:94) + at org.eclipse.core.runtime.SubProgressMonitor.internalWorked(SubProgressMonitor.java:155) + at org.eclipse.core.runtime.ProgressMonitorWrapper.internalWorked(ProgressMonitorWrapper.java:94) + at org.eclipse.core.runtime.SubProgressMonitor.internalWorked(SubProgressMonitor.java:155) + at org.eclipse.core.runtime.SubProgressMonitor.worked(SubProgressMonitor.java:181) + at org.eclipse.jdt.internal.core.JavaModelOperation.worked(JavaModelOperation.java:881) + at org.eclipse.jdt.internal.core.CommitWorkingCopyOperation.executeOperation(CommitWorkingCopyOperation.java:177) + at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:793) + at org.eclipse.jdt.internal.core.CompilationUnit.commitWorkingCopy(CompilationUnit.java:391) + at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.commitWorkingCopy(CompilationUnitDocumentProvider.java:1376) + 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.GeneratedMethodAccessor26.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.GeneratedMethodAccessor23.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) +Caused by: java.lang.IllegalStateException: Cannot fork a thread from a thread owning a rule + at org.eclipse.ui.actions.WorkspaceModifyOperation.threadChange(WorkspaceModifyOperation.java:148) + at org.eclipse.jface.operation.ModalContext.invokeThreadListener(ModalContext.java:442) + at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:383) + ... 149 more +Root exception: +java.lang.IllegalStateException: Cannot fork a thread from a thread owning a rule + at org.eclipse.ui.actions.WorkspaceModifyOperation.threadChange(WorkspaceModifyOperation.java:148) + at org.eclipse.jface.operation.ModalContext.invokeThreadListener(ModalContext.java:442) + at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:383) + at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1028) + at org.eclipse.jdt.internal.ui.jarpackager.JarPackageWizard.executeExportOperation(JarPackageWizard.java:167) + at org.eclipse.jdt.internal.ui.jarpackager.JarPackageWizard.performFinish(JarPackageWizard.java:270) + at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:827) + at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:432) + at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.eclipse.ui.internal.handlers.WizardHandler$Export.executeHandler(WizardHandler.java:103) + at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:279) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:290) + at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:76) + at sun.reflect.GeneratedMethodAccessor23.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.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:515) + at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:157) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) + at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) + at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758) + at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop(EventLoopProgressMonitor.java:123) + at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.internalWorked(EventLoopProgressMonitor.java:90) + at org.eclipse.core.runtime.ProgressMonitorWrapper.internalWorked(ProgressMonitorWrapper.java:94) + at org.eclipse.core.runtime.SubProgressMonitor.internalWorked(SubProgressMonitor.java:155) + at org.eclipse.core.runtime.SubProgressMonitor.worked(SubProgressMonitor.java:181) + at org.eclipse.core.runtime.SubMonitor$RootInfo.worked(SubMonitor.java:284) + at org.eclipse.core.runtime.SubMonitor.internalWorked(SubMonitor.java:570) + at org.eclipse.core.runtime.ProgressMonitorWrapper.internalWorked(ProgressMonitorWrapper.java:94) + at org.eclipse.core.runtime.SubProgressMonitor.internalWorked(SubProgressMonitor.java:155) + at org.eclipse.core.runtime.ProgressMonitorWrapper.internalWorked(ProgressMonitorWrapper.java:94) + at org.eclipse.core.runtime.SubProgressMonitor.internalWorked(SubProgressMonitor.java:155) + at org.eclipse.core.runtime.ProgressMonitorWrapper.internalWorked(ProgressMonitorWrapper.java:94) + at org.eclipse.core.runtime.SubProgressMonitor.internalWorked(SubProgressMonitor.java:155) + at org.eclipse.core.runtime.SubProgressMonitor.worked(SubProgressMonitor.java:181) + at org.eclipse.jdt.internal.core.JavaModelOperation.worked(JavaModelOperation.java:881) + at org.eclipse.jdt.internal.core.CommitWorkingCopyOperation.executeOperation(CommitWorkingCopyOperation.java:177) + at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:793) + at org.eclipse.jdt.internal.core.CompilationUnit.commitWorkingCopy(CompilationUnit.java:391) + at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.commitWorkingCopy(CompilationUnitDocumentProvider.java:1376) + 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.GeneratedMethodAccessor26.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.GeneratedMethodAccessor23.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) +!SESSION 2015-10-03 00:09:45.699 ----------------------------------------------- +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.core.resources 4 567 2015-10-03 00:09:51.377 +!MESSAGE Could not read metadata for 'D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\.metadata\.plugins\org.eclipse.core.resources\.root\.indexes\properties.index'. Unexpected version: 0. + +!ENTRY org.eclipse.jdt.launching 4 4 2015-10-03 00:10:24.676 +!MESSAGE Content is not allowed in prolog. +!STACK 0 +org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. + at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) + at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) + at org.eclipse.jdt.internal.launching.LaunchingPlugin.readInstallInfo(LaunchingPlugin.java:1012) + at org.eclipse.jdt.internal.launching.LaunchingPlugin.timeStampChanged(LaunchingPlugin.java:976) + at org.eclipse.jdt.internal.launching.VMDefinitionsContainer.populateVMForType(VMDefinitionsContainer.java:551) + at org.eclipse.jdt.internal.launching.VMDefinitionsContainer.populateVMTypes(VMDefinitionsContainer.java:488) + at org.eclipse.jdt.internal.launching.VMDefinitionsContainer.parseXMLIntoContainer(VMDefinitionsContainer.java:467) + at org.eclipse.jdt.launching.JavaRuntime.addPersistedVMs(JavaRuntime.java:1488) + at org.eclipse.jdt.launching.JavaRuntime.initializeVMs(JavaRuntime.java:2654) + at org.eclipse.jdt.launching.JavaRuntime.getVMInstallTypes(JavaRuntime.java:532) + at org.eclipse.jdt.internal.launching.environments.EnvironmentsManager.initializeCompatibilities(EnvironmentsManager.java:234) + at org.eclipse.jdt.internal.launching.environments.ExecutionEnvironment.init(ExecutionEnvironment.java:177) + at org.eclipse.jdt.internal.launching.environments.ExecutionEnvironment.getDefaultVM(ExecutionEnvironment.java:214) + at org.eclipse.jdt.internal.launching.JREContainerInitializer.resolveVM(JREContainerInitializer.java:173) + at org.eclipse.jdt.internal.launching.JREContainerInitializer.resolveVM(JREContainerInitializer.java:140) + at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize(JREContainerInitializer.java:57) + at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2843) + at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1878) + at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:3128) + at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2691) + at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2855) + at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1960) + at org.eclipse.jdt.internal.core.JavaProject.buildStructure(JavaProject.java:463) + at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:258) + at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:518) + at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:255) + at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:241) + at org.eclipse.jdt.internal.core.JavaProject.getJavaProjectElementInfo(JavaProject.java:1640) + at org.eclipse.jdt.internal.core.JavaProject.newNameLookup(JavaProject.java:2327) + at org.eclipse.jdt.internal.core.SearchableEnvironment.(SearchableEnvironment.java:59) + at org.eclipse.jdt.internal.core.SearchableEnvironment.(SearchableEnvironment.java:66) + at org.eclipse.jdt.internal.core.CancelableNameEnvironment.(CancelableNameEnvironment.java:26) + at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:176) + at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:269) + at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:190) + at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:89) + at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728) + at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:788) + at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1247) + at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:126) + at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:108) + at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:89) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87) + at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.initialReconcile(JavaReconcilingStrategy.java:178) + at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.initialReconcile(CompositeReconcilingStrategy.java:114) + at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.initialReconcile(JavaCompositeReconcilingStrategy.java:136) + at org.eclipse.jface.text.reconciler.MonoReconciler.initialProcess(MonoReconciler.java:105) + at org.eclipse.jdt.internal.ui.text.JavaReconciler.initialProcess(JavaReconciler.java:406) + at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:173) + +!ENTRY org.eclipse.mylyn.tasks.core 2 0 2015-10-03 00:10:25.869 +!MESSAGE Failed to load tasks.xml.zip, restoring from snapshot +!STACK 1 +org.eclipse.core.runtime.CoreException: Failed to load Task List + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer.openTaskList(TaskListExternalizer.java:330) + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer.readTaskList(TaskListExternalizer.java:217) + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizationParticipant$1.execute(TaskListExternalizationParticipant.java:78) + at org.eclipse.mylyn.internal.tasks.core.TaskList.run(TaskList.java:673) + at org.eclipse.mylyn.internal.tasks.core.TaskList.run(TaskList.java:664) + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizationParticipant.load(TaskListExternalizationParticipant.java:82) + at org.eclipse.mylyn.internal.tasks.core.externalization.AbstractExternalizationParticipant.performLoad(AbstractExternalizationParticipant.java:83) + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizationParticipant.performLoad(TaskListExternalizationParticipant.java:87) + at org.eclipse.mylyn.internal.tasks.core.externalization.AbstractExternalizationParticipant.execute(AbstractExternalizationParticipant.java:73) + at org.eclipse.mylyn.internal.tasks.core.externalization.ExternalizationManager$1.run(ExternalizationManager.java:117) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.mylyn.internal.tasks.core.externalization.ExternalizationManager.load(ExternalizationManager.java:106) + at org.eclipse.mylyn.internal.tasks.core.externalization.ExternalizationManager.load(ExternalizationManager.java:84) + at org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin.initializeDataSources(TasksUiPlugin.java:880) + at org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin.start(TasksUiPlugin.java:625) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) + at java.security.AccessController.doPrivileged(Native Method) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) + at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) + at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) + at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) + at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263) + at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) + at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) + at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + at java.lang.ClassLoader.loadClass(Unknown Source) + at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340) + at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229) + at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212) + at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174) + at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905) + at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) + at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55) + at org.eclipse.ui.internal.registry.ViewDescriptor.createView(ViewDescriptor.java:62) + at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:112) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPart(CompatibilityPart.java:262) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:299) + 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.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:861) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:841) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:113) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:321) + at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:242) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:161) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:102) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:71) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:53) + at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:141) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:894) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:629) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$6.run(PartRenderingEngine.java:520) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:505) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:74) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:894) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:629) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1115) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:98) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:645) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:103) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:98) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:77) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:645) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:644) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:987) + 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) +Caused by: org.eclipse.core.runtime.CoreException: Task list file contains no entry for the task list + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer.openTaskList(TaskListExternalizer.java:319) + ... 159 more +!SUBENTRY 1 org.eclipse.mylyn.tasks.core 4 0 2015-10-03 00:10:25.873 +!MESSAGE Failed to load Task List +!STACK 1 +org.eclipse.core.runtime.CoreException: Task list file contains no entry for the task list + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer.openTaskList(TaskListExternalizer.java:319) + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer.readTaskList(TaskListExternalizer.java:217) + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizationParticipant$1.execute(TaskListExternalizationParticipant.java:78) + at org.eclipse.mylyn.internal.tasks.core.TaskList.run(TaskList.java:673) + at org.eclipse.mylyn.internal.tasks.core.TaskList.run(TaskList.java:664) + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizationParticipant.load(TaskListExternalizationParticipant.java:82) + at org.eclipse.mylyn.internal.tasks.core.externalization.AbstractExternalizationParticipant.performLoad(AbstractExternalizationParticipant.java:83) + at org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizationParticipant.performLoad(TaskListExternalizationParticipant.java:87) + at org.eclipse.mylyn.internal.tasks.core.externalization.AbstractExternalizationParticipant.execute(AbstractExternalizationParticipant.java:73) + at org.eclipse.mylyn.internal.tasks.core.externalization.ExternalizationManager$1.run(ExternalizationManager.java:117) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.mylyn.internal.tasks.core.externalization.ExternalizationManager.load(ExternalizationManager.java:106) + at org.eclipse.mylyn.internal.tasks.core.externalization.ExternalizationManager.load(ExternalizationManager.java:84) + at org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin.initializeDataSources(TasksUiPlugin.java:880) + at org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin.start(TasksUiPlugin.java:625) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) + at java.security.AccessController.doPrivileged(Native Method) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) + at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) + at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) + at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) + at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263) + at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) + at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) + at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + at java.lang.ClassLoader.loadClass(Unknown Source) + at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340) + at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229) + at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212) + at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174) + at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905) + at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) + at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55) + at org.eclipse.ui.internal.registry.ViewDescriptor.createView(ViewDescriptor.java:62) + at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:112) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPart(CompatibilityPart.java:262) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:299) + 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.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:861) + at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:841) + at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:113) + at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:321) + at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:242) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:161) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:102) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:71) + at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:53) + at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:141) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:894) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:629) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$6.run(PartRenderingEngine.java:520) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:505) + at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:74) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:894) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:629) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1115) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:98) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:645) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:103) + at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:98) + at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:77) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:645) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:59) + at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:644) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:641) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:731) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:702) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:696) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:681) + at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:987) + 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) +!SUBENTRY 2 org.eclipse.mylyn.tasks.core 4 0 2015-10-03 00:10:25.887 +!MESSAGE Task list file contains no entry for the task list + +!ENTRY org.eclipse.egit.ui 2 0 2015-10-03 00:10:32.518 +!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-10-03 00:10:32.519 +!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.jdt.ui 4 10001 2015-10-03 00:10:38.931 +!MESSAGE Internal Error +!STACK 1 +org.eclipse.jdt.internal.ui.JavaUIException: Problems reading information from XML 'OpenTypeHistory.xml' + at org.eclipse.jdt.internal.corext.util.History.createException(History.java:71) + at org.eclipse.jdt.internal.corext.util.History.load(History.java:260) + at org.eclipse.jdt.internal.corext.util.History.load(History.java:168) + at org.eclipse.jdt.internal.corext.util.OpenTypeHistory.(OpenTypeHistory.java:199) + at org.eclipse.jdt.internal.corext.util.OpenTypeHistory.getInstance(OpenTypeHistory.java:185) + at org.eclipse.jdt.internal.ui.JavaPlugin.initializeAfterLoad(JavaPlugin.java:395) + at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:37) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. + at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) + at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) + at org.eclipse.jdt.internal.corext.util.History.load(History.java:258) + ... 6 more +!SUBENTRY 1 org.eclipse.jdt.ui 4 4 2015-10-03 00:10:38.931 +!MESSAGE Problems reading information from XML 'OpenTypeHistory.xml' +!STACK 0 +org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. + at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) + at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) + at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) + at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) + at org.eclipse.jdt.internal.corext.util.History.load(History.java:258) + at org.eclipse.jdt.internal.corext.util.History.load(History.java:168) + at org.eclipse.jdt.internal.corext.util.OpenTypeHistory.(OpenTypeHistory.java:199) + at org.eclipse.jdt.internal.corext.util.OpenTypeHistory.getInstance(OpenTypeHistory.java:185) + at org.eclipse.jdt.internal.ui.JavaPlugin.initializeAfterLoad(JavaPlugin.java:395) + at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:37) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.e4.ui.workbench 4 0 2015-10-03 00:11:24.212 +!MESSAGE Error setting focus to : org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl Commands.java +!STACK 0 +org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4361) + at org.eclipse.swt.SWT.error(SWT.java:4276) + at org.eclipse.swt.SWT.error(SWT.java:4247) + at org.eclipse.swt.widgets.Widget.error(Widget.java:468) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340) + at org.eclipse.swt.widgets.Control.setFocus(Control.java:3301) + at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:1038) + at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:1038) + at org.eclipse.ui.texteditor.StatusTextEditor.setFocus(StatusTextEditor.java:120) + at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.setFocus(JavaEditor.java:2389) + at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.delegateSetFocus(CompatibilityPart.java:189) + 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.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:208) + at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:106) + at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer$2.setFocus(ContributedPartRenderer.java:101) + at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer$9.mouseUp(StackRenderer.java:942) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:220) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758) + 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) +!SESSION 2015-10-03 18:03:32.612 ----------------------------------------------- +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-10-03 18:04:12.032 +!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-10-03 18:04:12.341 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 4 0 2015-10-03 18:14:50.481 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:25:49.604 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:25:50.112 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:25:50.558 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:25:53.731 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:28:03.237 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:30:56.929 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:32:16.937 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:32:30.375 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:32:30.965 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:21.022 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:22.413 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:23.225 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:23.616 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:23.866 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:24.075 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:24.263 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:24.447 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:24.632 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:24.814 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:25.206 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:25.399 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:25.581 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:28.008 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:28.223 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:28.408 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:28.593 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:29.037 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:29.092 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:29.289 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:29.407 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:29.610 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:30.061 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:31.708 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:31.969 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:32.100 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:32.255 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:32.683 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:32.886 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:33.076 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:33.352 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:33.541 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:33.668 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:39.171 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:39.439 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:39.710 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:39.945 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:40.119 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:36:40.557 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:37:22.058 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:37:23.015 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:37:23.320 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 18:37:54.195 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 19:08:45.316 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 19:08:45.549 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-03 19:09:52.677 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) +!SESSION 2015-10-03 20:50:52.810 ----------------------------------------------- +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-10-03 20:51:41.286 +!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-10-03 20:51:41.537 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:12:39.951 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:12:46.632 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:12:53.203 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:12:53.342 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:12:53.452 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:12:53.773 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:12:53.911 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:12:54.084 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:12:54.636 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:12:56.584 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:13:00.382 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:13:01.006 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:13:01.238 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:13:01.331 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:13:02.475 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-03 22:13:15.770 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +!SESSION 2015-10-04 20:04:34.878 ----------------------------------------------- +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-10-04 20:05:15.104 +!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-10-04 20:05:15.194 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-10-05 19:38:35.697 ----------------------------------------------- +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-10-05 19:39:23.659 +!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-10-05 19:39:23.946 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-10-12 19:12:00.690 ----------------------------------------------- +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-10-12 19:14:32.941 +!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-10-12 19:14:33.224 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-10-13 21:36:48.406 ----------------------------------------------- +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-10-13 21:37:48.889 +!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-10-13 21:37:48.990 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 4 0 2015-10-13 22:02:25.350 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-13 22:02:27.345 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-13 22:03:54.885 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) +!SESSION 2015-10-16 16:52:13.374 ----------------------------------------------- +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-10-16 16:53:30.189 +!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-10-16 16:53:30.302 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:05.728 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:05.771 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:06.172 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:07.358 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:07.390 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:07.690 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:09.042 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:09.737 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:11.084 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:12.473 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:13.839 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:13.947 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:14.479 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:14.572 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:14.783 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:14.991 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:15.411 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:15.428 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:15.771 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:16.230 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:16.364 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:16.444 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:16.563 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:17.071 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:17.486 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:17.568 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:17.634 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:17.797 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:17.801 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 18:29:18.021 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +!SESSION 2015-10-16 20:41:58.716 ----------------------------------------------- +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-10-16 20:42:51.692 +!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-10-16 20:42:51.834 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 21:32:53.730 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 21:34:58.104 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:37:46.852 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:37:49.145 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:37:49.352 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:37:49.555 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:37:49.915 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:37:50.325 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:37:51.655 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:37:51.921 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:37:56.143 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:38:40.540 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:39:46.250 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:39:49.775 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:39:52.286 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:39:52.946 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:41:14.748 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:41:15.793 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:41:16.316 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:49.771 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:50.020 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:51.965 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:53.819 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:54.230 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:54.409 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:54.893 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:54.989 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:55.312 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:55.654 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:57.502 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:57.828 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:57.934 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:58.124 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:58.444 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:58.820 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:59.133 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:59.430 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:59.713 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:45:59.739 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:00.321 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:01.039 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:01.113 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:01.217 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:01.747 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:01.840 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:01.991 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:02.352 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:02.486 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:05.736 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:05.849 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:06.177 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:06.490 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:06.531 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:06.537 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:06.853 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:07.464 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:07.503 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:07.939 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:08.112 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:08.411 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:08.732 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:46:09.098 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:47:47.337 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:53:16.419 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:53:16.637 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:53:16.925 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:34.777 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:35.457 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:36.845 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:38.410 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:38.776 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:39.494 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:51.379 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:51.691 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:52.283 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:52.869 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:55:53.173 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:56:05.305 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:56:05.409 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:56:05.810 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 21:57:19.914 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 21:57:21.428 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 21:57:24.845 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 21:57:28.585 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 21:57:29.548 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:57:32.445 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:57:34.572 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:57:42.709 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:58:01.704 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:58:02.029 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:58:02.564 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:58:02.769 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:58:03.862 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:58:03.945 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 21:58:16.114 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 21:58:22.944 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 21:58:30.252 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:58:31.319 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:58:36.912 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:58:43.083 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:08.857 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:09.137 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:13.170 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:15.157 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:15.417 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:15.951 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:16.282 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:16.681 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:16.764 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:16.887 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:24.565 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:24.942 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:24.943 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:25.314 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:25.352 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:32.049 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:32.404 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:32.441 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:32.767 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:32.785 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:33.185 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:39.017 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:39.293 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:39.680 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:39.894 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:40.765 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:41.097 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:41.272 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:41.452 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:41.856 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:42.253 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:47.263 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:47.536 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:47.960 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:47.999 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:48.423 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:48.500 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:48.537 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:48.719 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:48.971 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 21:59:49.017 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:00.058 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:00.161 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:01.162 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:02.378 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:02.746 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:03.146 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:03.241 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:03.542 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:03.611 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:03.845 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:04.128 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:04.336 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:04.519 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:05.017 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:05.216 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:05.706 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:05.979 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:22.972 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:33.422 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:40.289 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:40.651 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:41.000 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:42.503 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:43.333 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:45.913 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:00:46.132 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:01:44.054 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:01:45.225 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:01:59.587 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:02:00.192 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:02:11.836 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:02:12.325 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:02:25.124 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:02:25.385 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:02:38.043 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:02:39.423 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:03:01.876 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:03:02.141 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 22:03:32.393 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:03:38.775 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:03:39.272 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:02.142 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:02.743 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 22:08:11.450 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 22:08:11.955 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:50.889 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:51.544 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:54.101 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:55.105 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:55.512 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:56.150 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:56.476 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:56.708 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:57.080 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:57.202 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:57.413 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:57.555 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:57.798 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:58.593 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:08:58.703 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:09:00.001 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:09:26.464 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:09:27.605 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:09:28.000 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:14:04.742 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:14:58.785 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:15:02.750 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:15:06.832 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:15:07.141 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:15:43.498 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:15:59.032 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:15:59.251 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:16:07.690 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:16:07.792 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:16:29.754 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:16:30.026 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:16:46.316 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:16:46.525 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:17:16.474 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:17:17.122 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:17:24.639 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:18:07.379 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:18:12.345 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:18:31.540 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:18:44.698 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 22:18:46.251 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 22:18:47.340 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:20:59.325 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:20:59.847 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 22:21:10.379 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:21:19.560 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 22:21:57.177 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:22:58.044 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:23:02.697 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:23:12.527 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:23:13.541 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:23:27.002 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:23:33.559 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:25:48.080 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:25:50.464 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:25:51.816 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:28:58.972 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:29:01.525 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:29:02.300 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:29:13.960 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:29:17.863 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:29:47.412 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:30:04.882 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 22:31:04.147 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:31:30.794 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:31:37.984 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface 2 0 2015-10-16 22:32:48.181 +!MESSAGE Keybinding conflicts occurred. They may interfere with normal accelerator operation. +!SUBENTRY 1 org.eclipse.jface 2 0 2015-10-16 22:32:48.181 +!MESSAGE A conflict occurred for ALT+SHIFT+ARROW_DOWN: +Binding(ALT+SHIFT+ARROW_DOWN, + ParameterizedCommand(Command(org.eclipse.jdt.ui.edit.text.java.select.last,Restore Last Selection, + Restore last selection, + Category(org.eclipse.ui.category.edit,Edit,null,true), + org.eclipse.ui.internal.MakeHandlersGo@43c1e01d, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.jdt.ui.javaEditorScope,,,system) +Binding(ALT+SHIFT+ARROW_DOWN, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.markTaskReadGoToNextUnread,Mark Task Read and Go To Next Unread Task, + , + Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), + org.eclipse.ui.internal.MakeHandlersGo@230f9f56, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +!SUBENTRY 1 org.eclipse.jface 2 0 2015-10-16 22:32:48.181 +!MESSAGE A conflict occurred for ALT+ARROW_DOWN: +Binding(ALT+ARROW_DOWN, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.goToNextUnread,Go To Next Unread Task, + , + Category(org.eclipse.ui.category.navigate,Navigate,null,true), + org.eclipse.ui.internal.MakeHandlersGo@5dbb50f3, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +Binding(ALT+ARROW_DOWN, + ParameterizedCommand(Command(org.eclipse.ui.edit.text.moveLineDown,Move Lines Down, + Moves the selected lines down, + Category(org.eclipse.ui.category.textEditor,Text Editing,Text Editing Commands,true), + org.eclipse.ui.internal.MakeHandlersGo@56232a19, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.ui.textEditorScope,,,system) +!SUBENTRY 1 org.eclipse.jface 2 0 2015-10-16 22:32:48.181 +!MESSAGE A conflict occurred for ALT+SHIFT+ARROW_UP: +Binding(ALT+SHIFT+ARROW_UP, + ParameterizedCommand(Command(org.eclipse.jdt.ui.edit.text.java.select.enclosing,Select Enclosing Element, + Expand selection to include enclosing element, + Category(org.eclipse.ui.category.edit,Edit,null,true), + org.eclipse.ui.internal.MakeHandlersGo@2b25277b, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.jdt.ui.javaEditorScope,,,system) +Binding(ALT+SHIFT+ARROW_UP, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.markTaskReadGoToPreviousUnread,Mark Task Read and Go To Previous Unread Task, + , + Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), + org.eclipse.ui.internal.MakeHandlersGo@67a8eb0a, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +!SUBENTRY 1 org.eclipse.jface 2 0 2015-10-16 22:32:48.181 +!MESSAGE A conflict occurred for ALT+SHIFT+U: +Binding(ALT+SHIFT+U, + ParameterizedCommand(Command(org.eclipse.jdt.ui.edit.text.remove.occurrence.annotations,Remove Occurrence Annotations, + Removes the occurrence annotations from the current editor, + Category(org.eclipse.jdt.ui.category.source,Source,Java Source Actions,true), + org.eclipse.ui.internal.MakeHandlersGo@38823d86, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.jdt.ui.javaEditorScope,,,system) +Binding(ALT+SHIFT+U, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.markTaskUnread,Mark Task Unread, + , + Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), + org.eclipse.ui.internal.MakeHandlersGo@773ebb6d, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +!SUBENTRY 1 org.eclipse.jface 2 0 2015-10-16 22:32:48.181 +!MESSAGE A conflict occurred for INSERT: +Binding(INSERT, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.new.local.task,New Local Task, + , + Category(org.eclipse.mylyn.tasks.ui.commands,Task Repositories,null,true), + org.eclipse.ui.internal.MakeHandlersGo@7522540e, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +Binding(INSERT, + ParameterizedCommand(Command(org.eclipse.ui.edit.text.toggleOverwrite,Toggle Overwrite, + Toggle overwrite mode, + Category(org.eclipse.ui.category.textEditor,Text Editing,Text Editing Commands,true), + org.eclipse.ui.internal.MakeHandlersGo@55f2111b, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.ui.textEditorScope,,,system) +!SUBENTRY 1 org.eclipse.jface 2 0 2015-10-16 22:32:48.181 +!MESSAGE A conflict occurred for ALT+ARROW_UP: +Binding(ALT+ARROW_UP, + ParameterizedCommand(Command(org.eclipse.mylyn.tasks.ui.command.goToPreviousUnread,Go To Previous Unread Task, + , + Category(org.eclipse.ui.category.navigate,Navigate,null,true), + org.eclipse.ui.internal.MakeHandlersGo@5cbd94b2, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.mylyn.tasks.ui.views.tasks,,,system) +Binding(ALT+ARROW_UP, + ParameterizedCommand(Command(org.eclipse.ui.edit.text.moveLineUp,Move Lines Up, + Moves the selected lines up, + Category(org.eclipse.ui.category.textEditor,Text Editing,Text Editing Commands,true), + org.eclipse.ui.internal.MakeHandlersGo@7c35782e, + ,,true),null), + org.eclipse.ui.defaultAcceleratorConfiguration, + org.eclipse.ui.textEditorScope,,,system) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:34:55.411 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:34:58.624 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:35:00.617 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:35:02.776 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:35:09.922 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:36:02.742 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:36:03.926 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:36:04.334 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:36:05.947 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:36:06.999 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:37:53.525 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:37:56.807 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:37:57.157 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:37:58.684 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:37:59.043 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:37:59.176 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:37:59.512 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:00.399 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:00.689 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:01.439 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:01.870 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:02.213 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:02.766 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:05.145 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:09.133 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:11.340 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:12.904 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:13.263 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:13.675 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:14.128 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:14.493 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:14.648 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:14.717 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:15.099 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:15.167 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:15.469 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:15.503 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:15.796 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:16.479 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:16.809 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:17.146 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:17.306 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:17.385 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:18.721 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:19.161 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:20.361 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:21.062 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:22.194 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:22.743 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:23.428 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:23.688 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:24.923 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:29.112 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:29.995 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:30.746 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:31.323 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:38:31.406 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:40:05.920 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:43:18.080 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-16 22:46:51.295 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:47:01.379 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-16 22:47:02.227 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) +!SESSION 2015-10-17 00:21:22.083 ----------------------------------------------- +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-10-17 00:22:11.265 +!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-10-17 00:22:11.428 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 00:22:47.317 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:23:57.380 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:23:58.829 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:23:58.941 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:24:00.548 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:24:12.247 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:24:12.520 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:24:12.865 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:24:17.576 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:24:17.899 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:24:18.251 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 00:24:22.618 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 00:24:24.996 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 00:34:28.758 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 00:37:44.406 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 00:41:52.527 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 00:53:17.841 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 00:53:43.790 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:56:24.591 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:56:26.279 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:56:26.579 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:56:32.849 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:56:33.522 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:56:43.931 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:56:44.390 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:56:44.431 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:58:14.823 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 00:58:16.783 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 01:00:28.531 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 01:00:29.659 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 01:01:01.944 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 01:01:02.390 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 01:01:15.896 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 01:01:16.923 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 01:14:48.967 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 01:15:12.494 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 01:16:42.023 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 01:16:45.405 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 01:16:46.518 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 01:16:58.903 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-17 01:17:27.013 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 4 0 2015-10-17 01:18:43.630 +!MESSAGE Unexpected runtime error while computing a text hover +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryMethod.getAttachedJavadoc(BinaryMethod.java:639) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo(JavadocHover.java:619) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:565) + at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:557) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163) + at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129) + at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:85) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166) +!SESSION 2015-10-18 02:48:57.268 ----------------------------------------------- +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-10-18 02:49:34.912 +!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-10-18 02:49:35.002 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-10-24 10:55:34.076 ----------------------------------------------- +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 -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -data D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.egit.ui 2 0 2015-10-24 10:55:50.139 +!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-10-24 10:55:50.189 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:58:51.952 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:58:56.398 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:00.244 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:00.656 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:03.152 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:04.742 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:05.162 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:05.312 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:05.472 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:05.642 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:05.782 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:05.942 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:06.132 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:08.772 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) + +!ENTRY org.eclipse.jface.text 2 0 2015-10-24 10:59:08.972 +!MESSAGE +!STACK 0 +java.lang.StringIndexOutOfBoundsException: String index out of range: -10 + at java.lang.String.checkBounds(Unknown Source) + at java.lang.String.(Unknown Source) + at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:786) + at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1037) + at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:995) + at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:463) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.extractJavadoc(ProposalInfo.java:95) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.computeInfo(ProposalInfo.java:75) + at org.eclipse.jdt.internal.ui.text.java.ProposalInfo.getInfo(ProposalInfo.java:58) + at org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal.getAdditionalProposalInfo(AbstractJavaCompletionProposal.java:555) + at org.eclipse.jface.text.contentassist.AdditionalInfoController$3.run(AdditionalInfoController.java:106) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/0/b052507c0e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/0/b052507c0e8b00151149b99c05b1b975 new file mode 100644 index 0000000..1e60dca --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/0/b052507c0e8b00151149b99c05b1b975 @@ -0,0 +1,316 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw "+mp.PlayerName+" "+json); + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/10/d0e4ec032387001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/10/d0e4ec032387001519af89c6c0264943 new file mode 100644 index 0000000..f82a5f8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/10/d0e4ec032387001519af89c6c0264943 @@ -0,0 +1,306 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.IOUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.lang.String; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. + // A user, which flair isn't obtainable: + // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + public static PluginMain Instance; + public static ConsoleCommandSender Console; // 2015.08.12. + + // Fired when plugin is first enabled + @Override + public void onEnable() { + System.out.println("The Button Minecraft server plugin"); + getServer().getPluginManager().registerEvents(new PlayerListener(), + this); + Commands comm = new Commands(); + this.getCommand("u").setExecutor(comm); + this.getCommand("u").setUsage( + this.getCommand("u").getUsage().replace('&', '§')); + this.getCommand("nrp").setExecutor(comm); + this.getCommand("nrp").setUsage( + this.getCommand("nrp").getUsage().replace('&', '§')); + this.getCommand("ooc").setExecutor(comm); + this.getCommand("ooc").setUsage( + this.getCommand("ooc").getUsage().replace('&', '§')); + this.getCommand("skype").setExecutor(comm); + Instance = this; // 2015.08.08. + Console = this.getServer().getConsoleSender(); // 2015.08.12. + LoadFiles(false); // 2015.08.09. + Runnable r = new Runnable() { + public void run() { + ThreadMethod(); + } + }; + Thread t = new Thread(r); + t.start(); + r = new Runnable() { + public void run() { + AnnouncerThread.Run(); + } + }; + t = new Thread(r); + t.start(); + } + + public Boolean stop = false; + + // Fired when plugin is disabled + @Override + public void onDisable() { + SaveFiles(); // 2015.08.09. + stop = true; + } + + public void ThreadMethod() // <-- 2015.07.16. + { + while (!stop) { + try { + String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json = new JSONArray(body).getJSONObject(1) + .getJSONObject("data").getJSONArray("children"); + for (Object obj : json) { + JSONObject item = (JSONObject) obj; + String author = item.getJSONObject("data").getString( + "author"); + String ign = item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if (start == -1 + "IGN:".length()) // +length: 2015.08.10. + continue; // 2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end = ign.indexOf('\n', start); // 2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); + if (mp == null) + continue; + if (HasIGFlair(mp.UUID)) + continue; + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString( + "http://karmadecay.com/thebutton-data.php?users=" + + author).replace("\"", "").split(":"); + String flair; + if (flairdata.length > 1) // 2015.07.15. + flair = flairdata[1]; + else + flair = ""; + if (flair != "-1") + flair = flair + "s"; + String flairclass; + if (flairdata.length > 2) + flairclass = flairdata[2]; + else + flairclass = "unknown"; + SetFlair(mp.UUID, flair, flairclass, author); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } catch (Exception e) { + // System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + } + + public static Exception LastException; // 2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, + IOException { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors = new HashMap(); // 2015.07.20. + + public Boolean HasIGFlair(UUID uuid) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + return p.CommentedOnReddit; // 2015.08.10. + } + + public void SetFlair(UUID uuid, String text, String flairclass, + String username) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + String finalflair; + p.FlairDecided = true; + p.FlairRecognised = true; + switch (flairclass) { + case "press-1": + finalflair = "§c(" + text + ")§r"; + break; + case "press-2": + finalflair = "§6(" + text + ")§r"; + break; + case "press-3": + finalflair = "§e(" + text + ")§r"; + break; + case "press-4": + finalflair = "§a(" + text + ")§r"; + break; + case "press-5": + finalflair = "§9(" + text + ")§r"; + break; + case "press-6": + finalflair = "§5(" + text + ")§r"; + break; + case "no-press": + finalflair = "§7(--s)§r"; + break; + case "cheater": + finalflair = "§5(" + text + ")§r"; + break; + case "cant-press": // 2015.08.08. + finalflair = "§r(??s)§r"; + break; + case "unknown": + if (text.equals("-1")) // If true, only non-presser/can't press; if + // false, any flair + p.FlairDecided = false; + else + p.FlairRecognised = false; + finalflair = ""; + break; + default: + return; + } + p.Flair = finalflair; // 2015.08.08. + p.CommentedOnReddit = true; // 2015.08.10. + p.UserName = username; // 2015.08.08. + System.out.println("Added flair for " + p.PlayerName); + AppendPlayerDisplayFlair(p, Bukkit.getPlayer(uuid)); + } + + public static String GetFlair(Player player) { // 2015.07.16. + String flair = MaybeOfflinePlayer.AllPlayers.get(player.getUniqueId()).Flair; // 2015.08.08. + return flair; // 2015.08.10. + } + + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, + Player p) // <-- 2015.08.09. + { + + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).IgnoredFlair) + return; + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).AcceptedFlair) { + if (!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. + } else + p.sendMessage("§9Are you Reddit user " + player.UserName + + "?§r §6Type /u accept or /u ignore§r"); + } + + public static String GetColorForTown(String townname) { // 2015.07.20. + if (TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static Collection GetPlayers() { + return Instance.getServer().getOnlinePlayers(); + } + + public static ArrayList AnnounceMessages = new ArrayList<>(); + public static int AnnounceTime = 15 * 60 * 1000; + + public static void LoadFiles(boolean reload) // <-- 2015.08.09. + { + if (reload) { // 2015.08.09. + System.out + .println("The Button Minecraft plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + AnnounceMessages.clear(); + Commands.Quiz.clear(); + } + System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("announcemessages.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsaccepted.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsignored.txt"); + if (file.exists()) + file.delete(); + file = new File("thebuttonmc.yml"); + if (file.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + yc.load(file); + MaybeOfflinePlayer.Load(yc); + PlayerListener.NotificationSound = yc + .getString("notificationsound"); + PlayerListener.NotificationPitch = yc + .getDouble("notificationpitch"); + AnnounceTime = yc.getInt("announcetime"); + AnnounceMessages.addAll(yc.getStringList("announcements")); + Commands.Quiz.addAll(yc.getStringList("quiz")); + } + System.out.println("The Button Minecraft plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } catch (InvalidConfigurationException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static void SaveFiles() // <-- 2015.08.09. + { + System.out.println("Saving files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("thebuttonmc.yml"); + YamlConfiguration yc = new YamlConfiguration(); + MaybeOfflinePlayer.Save(yc); + yc.set("notificationsound", PlayerListener.NotificationSound); + yc.set("notificationpitch", PlayerListener.NotificationPitch); + yc.set("announcetime", AnnounceTime); + yc.set("announcements", AnnounceMessages); + yc.set("quiz", Commands.Quiz); + yc.save(file); + System.out.println("The Button Minecraft plugin saved files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/11/e01f2e4b2287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/11/e01f2e4b2287001519af89c6c0264943 new file mode 100644 index 0000000..ecfa676 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/11/e01f2e4b2287001519af89c6c0264943 @@ -0,0 +1,575 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/15/5014e4bc2287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/15/5014e4bc2287001519af89c6c0264943 new file mode 100644 index 0000000..d5d1e81 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/15/5014e4bc2287001519af89c6c0264943 @@ -0,0 +1,583 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "quiz": + DoQuiz(player, args, null); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } else if (args.length > 0 && args[0].toLowerCase().equals("quiz")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + public static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/17/507a5da62287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/17/507a5da62287001519af89c6c0264943 new file mode 100644 index 0000000..965c069 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/17/507a5da62287001519af89c6c0264943 @@ -0,0 +1,577 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "quiz": + DoQuiz(player, args, null); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + public static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/19/50c4f47b2087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/19/50c4f47b2087001519af89c6c0264943 new file mode 100644 index 0000000..f9a764a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/19/50c4f47b2087001519af89c6c0264943 @@ -0,0 +1,491 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1a/b04e3d72168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/1a/b04e3d72168b00151149b99c05b1b975 new file mode 100644 index 0000000..93e033c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1a/b04e3d72168b00151149b99c05b1b975 @@ -0,0 +1,5 @@ +package tk.sznp.thebuttonautoflair; + +public class PlayerJoinTimerTask { + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c0bedf60e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c0bedf60e640001514c09dece48b36c7 new file mode 100644 index 0000000..bc3d453 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1a/c0bedf60e640001514c09dece48b36c7 @@ -0,0 +1,73 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(p.getLocation(), Sound.ORB_PICKUP, arg2, arg3) + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1d/40013c152287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/1d/40013c152287001519af89c6c0264943 new file mode 100644 index 0000000..d2a9262 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1d/40013c152287001519af89c6c0264943 @@ -0,0 +1,579 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1d/709a3bde2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/1d/709a3bde2d53001516cdaaef55e27ba4 new file mode 100644 index 0000000..dcd717b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1d/709a3bde2d53001516cdaaef55e27ba4 @@ -0,0 +1,15 @@ +name: TheButtonMCPlugin +main: tk.sznp.thebuttonautoflair.PluginMain +version: 2.0 +commands: + u: + description: Auto-flair system. Accept or ignore flair. + usage: "&cUsage: /u accept|ignore|opme&r" + nrp: + description: Send message in Out-of-Character + usage: "&cUsage: /nrp &r" + ooc: + description: Send message in Out-of-Character + usage: "&cUsage: /ooc &r" +author: NorbiPeti +depend: [Essentials, Towny] \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/606a09eede40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/606a09eede40001514c09dece48b36c7 new file mode 100644 index 0000000..d1dda6d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/606a09eede40001514c09dece48b36c7 @@ -0,0 +1,297 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + System.out.println(message); + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§6The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/1e/d0e4168be540001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/d0e4168be540001514c09dece48b36c7 new file mode 100644 index 0000000..8742a9c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/1e/d0e4168be540001514c09dece48b36c7 @@ -0,0 +1,71 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2/008fa000f34500151ebce83b3129f79d b/.metadata/.plugins/org.eclipse.core.resources/.history/2/008fa000f34500151ebce83b3129f79d new file mode 100644 index 0000000..9f10d95 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2/008fa000f34500151ebce83b3129f79d @@ -0,0 +1,78 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + public static String NotificationSound; //2015.08.14. + public static float NotificationPitch; //2015.08.14. + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + String color=""; //2015.08.17. + if(message.contains(p.getName())) + { + if(NotificationSound==null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); //2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, NotificationPitch); //2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.17. + color=mp.Flair.substring(0, 2); + } + message = message.replaceAll(p.getName(), color+p.getName()+"§r"); + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + Object handle = Reflection.getHandle(player); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/20/802a22d2de40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/20/802a22d2de40001514c09dece48b36c7 new file mode 100644 index 0000000..2df291c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/20/802a22d2de40001514c09dece48b36c7 @@ -0,0 +1,71 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message.replaceAll(p.getName(), ) + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/21/40187b959b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/21/40187b959b8c0015169bb4f96b251538 new file mode 100644 index 0000000..d146e2f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/21/40187b959b8c0015169bb4f96b251538 @@ -0,0 +1,328 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + private Timer Ftimer; + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + if (Ftimer != null) + Ftimer.cancel(); + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Ftimer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (ActiveF) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + }; + Ftimer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/21/c0a02994e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/21/c0a02994e640001514c09dece48b36c7 new file mode 100644 index 0000000..8bd4265 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/21/c0a02994e640001514c09dece48b36c7 @@ -0,0 +1,74 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + if(message.contains(p.getName())) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f); //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/22/40feff6ce640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/22/40feff6ce640001514c09dece48b36c7 new file mode 100644 index 0000000..4e9ef04 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/22/40feff6ce640001514c09dece48b36c7 @@ -0,0 +1,73 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0, 1.0); //2015.08.12. + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/25/4082086f2087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/25/4082086f2087001519af89c6c0264943 new file mode 100644 index 0000000..9c0f2e1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/25/4082086f2087001519af89c6c0264943 @@ -0,0 +1,491 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'), + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/25/c05ce792e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/25/c05ce792e640001514c09dece48b36c7 new file mode 100644 index 0000000..12d9c01 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/25/c05ce792e640001514c09dece48b36c7 @@ -0,0 +1,73 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f); //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/26/20c757a6168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/26/20c757a6168b00151149b99c05b1b975 new file mode 100644 index 0000000..7fc48cf --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/26/20c757a6168b00151149b99c05b1b975 @@ -0,0 +1,323 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + public MaybeOfflinePlayer mp; + + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp=mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/28/a02aeb89168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/28/a02aeb89168b00151149b99c05b1b975 new file mode 100644 index 0000000..7cab85b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/28/a02aeb89168b00151149b99c05b1b975 @@ -0,0 +1,10 @@ +package tk.sznp.thebuttonautoflair; + +import java.util.TimerTask; + +public class PlayerJoinTimerTask extends TimerTask { + + @Override + public abstract void run(); + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/29/40e1da43e340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/29/40e1da43e340001514c09dece48b36c7 new file mode 100644 index 0000000..b844d5e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/29/40e1da43e340001514c09dece48b36c7 @@ -0,0 +1,295 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/29/50338b22e340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/29/50338b22e340001514c09dece48b36c7 new file mode 100644 index 0000000..4f33dd3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/29/50338b22e340001514c09dece48b36c7 @@ -0,0 +1,298 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2b/20adfe8f138b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/2b/20adfe8f138b00151149b99c05b1b975 new file mode 100644 index 0000000..22720e2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2b/20adfe8f138b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2b/702271ffde40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/2b/702271ffde40001514c09dece48b36c7 new file mode 100644 index 0000000..e334416 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2b/702271ffde40001514c09dece48b36c7 @@ -0,0 +1,297 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + System.out.println(message); + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2c/209f3c7b168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/2c/209f3c7b168b00151149b99c05b1b975 new file mode 100644 index 0000000..e053f25 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2c/209f3c7b168b00151149b99c05b1b975 @@ -0,0 +1,7 @@ +package tk.sznp.thebuttonautoflair; + +import java.util.TimerTask; + +public class PlayerJoinTimerTask extends TimerTask { + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2d/b05650032387001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/2d/b05650032387001519af89c6c0264943 new file mode 100644 index 0000000..f82a5f8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2d/b05650032387001519af89c6c0264943 @@ -0,0 +1,306 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.IOUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.lang.String; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. + // A user, which flair isn't obtainable: + // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + public static PluginMain Instance; + public static ConsoleCommandSender Console; // 2015.08.12. + + // Fired when plugin is first enabled + @Override + public void onEnable() { + System.out.println("The Button Minecraft server plugin"); + getServer().getPluginManager().registerEvents(new PlayerListener(), + this); + Commands comm = new Commands(); + this.getCommand("u").setExecutor(comm); + this.getCommand("u").setUsage( + this.getCommand("u").getUsage().replace('&', '§')); + this.getCommand("nrp").setExecutor(comm); + this.getCommand("nrp").setUsage( + this.getCommand("nrp").getUsage().replace('&', '§')); + this.getCommand("ooc").setExecutor(comm); + this.getCommand("ooc").setUsage( + this.getCommand("ooc").getUsage().replace('&', '§')); + this.getCommand("skype").setExecutor(comm); + Instance = this; // 2015.08.08. + Console = this.getServer().getConsoleSender(); // 2015.08.12. + LoadFiles(false); // 2015.08.09. + Runnable r = new Runnable() { + public void run() { + ThreadMethod(); + } + }; + Thread t = new Thread(r); + t.start(); + r = new Runnable() { + public void run() { + AnnouncerThread.Run(); + } + }; + t = new Thread(r); + t.start(); + } + + public Boolean stop = false; + + // Fired when plugin is disabled + @Override + public void onDisable() { + SaveFiles(); // 2015.08.09. + stop = true; + } + + public void ThreadMethod() // <-- 2015.07.16. + { + while (!stop) { + try { + String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json = new JSONArray(body).getJSONObject(1) + .getJSONObject("data").getJSONArray("children"); + for (Object obj : json) { + JSONObject item = (JSONObject) obj; + String author = item.getJSONObject("data").getString( + "author"); + String ign = item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if (start == -1 + "IGN:".length()) // +length: 2015.08.10. + continue; // 2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end = ign.indexOf('\n', start); // 2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); + if (mp == null) + continue; + if (HasIGFlair(mp.UUID)) + continue; + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString( + "http://karmadecay.com/thebutton-data.php?users=" + + author).replace("\"", "").split(":"); + String flair; + if (flairdata.length > 1) // 2015.07.15. + flair = flairdata[1]; + else + flair = ""; + if (flair != "-1") + flair = flair + "s"; + String flairclass; + if (flairdata.length > 2) + flairclass = flairdata[2]; + else + flairclass = "unknown"; + SetFlair(mp.UUID, flair, flairclass, author); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } catch (Exception e) { + // System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + } + + public static Exception LastException; // 2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, + IOException { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors = new HashMap(); // 2015.07.20. + + public Boolean HasIGFlair(UUID uuid) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + return p.CommentedOnReddit; // 2015.08.10. + } + + public void SetFlair(UUID uuid, String text, String flairclass, + String username) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + String finalflair; + p.FlairDecided = true; + p.FlairRecognised = true; + switch (flairclass) { + case "press-1": + finalflair = "§c(" + text + ")§r"; + break; + case "press-2": + finalflair = "§6(" + text + ")§r"; + break; + case "press-3": + finalflair = "§e(" + text + ")§r"; + break; + case "press-4": + finalflair = "§a(" + text + ")§r"; + break; + case "press-5": + finalflair = "§9(" + text + ")§r"; + break; + case "press-6": + finalflair = "§5(" + text + ")§r"; + break; + case "no-press": + finalflair = "§7(--s)§r"; + break; + case "cheater": + finalflair = "§5(" + text + ")§r"; + break; + case "cant-press": // 2015.08.08. + finalflair = "§r(??s)§r"; + break; + case "unknown": + if (text.equals("-1")) // If true, only non-presser/can't press; if + // false, any flair + p.FlairDecided = false; + else + p.FlairRecognised = false; + finalflair = ""; + break; + default: + return; + } + p.Flair = finalflair; // 2015.08.08. + p.CommentedOnReddit = true; // 2015.08.10. + p.UserName = username; // 2015.08.08. + System.out.println("Added flair for " + p.PlayerName); + AppendPlayerDisplayFlair(p, Bukkit.getPlayer(uuid)); + } + + public static String GetFlair(Player player) { // 2015.07.16. + String flair = MaybeOfflinePlayer.AllPlayers.get(player.getUniqueId()).Flair; // 2015.08.08. + return flair; // 2015.08.10. + } + + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, + Player p) // <-- 2015.08.09. + { + + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).IgnoredFlair) + return; + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).AcceptedFlair) { + if (!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. + } else + p.sendMessage("§9Are you Reddit user " + player.UserName + + "?§r §6Type /u accept or /u ignore§r"); + } + + public static String GetColorForTown(String townname) { // 2015.07.20. + if (TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static Collection GetPlayers() { + return Instance.getServer().getOnlinePlayers(); + } + + public static ArrayList AnnounceMessages = new ArrayList<>(); + public static int AnnounceTime = 15 * 60 * 1000; + + public static void LoadFiles(boolean reload) // <-- 2015.08.09. + { + if (reload) { // 2015.08.09. + System.out + .println("The Button Minecraft plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + AnnounceMessages.clear(); + Commands.Quiz.clear(); + } + System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("announcemessages.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsaccepted.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsignored.txt"); + if (file.exists()) + file.delete(); + file = new File("thebuttonmc.yml"); + if (file.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + yc.load(file); + MaybeOfflinePlayer.Load(yc); + PlayerListener.NotificationSound = yc + .getString("notificationsound"); + PlayerListener.NotificationPitch = yc + .getDouble("notificationpitch"); + AnnounceTime = yc.getInt("announcetime"); + AnnounceMessages.addAll(yc.getStringList("announcements")); + Commands.Quiz.addAll(yc.getStringList("quiz")); + } + System.out.println("The Button Minecraft plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } catch (InvalidConfigurationException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static void SaveFiles() // <-- 2015.08.09. + { + System.out.println("Saving files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("thebuttonmc.yml"); + YamlConfiguration yc = new YamlConfiguration(); + MaybeOfflinePlayer.Save(yc); + yc.set("notificationsound", PlayerListener.NotificationSound); + yc.set("notificationpitch", PlayerListener.NotificationPitch); + yc.set("announcetime", AnnounceTime); + yc.set("announcements", AnnounceMessages); + yc.set("quiz", Commands.Quiz); + yc.save(file); + System.out.println("The Button Minecraft plugin saved files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/30/60f899dc2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/30/60f899dc2d53001516cdaaef55e27ba4 new file mode 100644 index 0000000..dcd717b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/30/60f899dc2d53001516cdaaef55e27ba4 @@ -0,0 +1,15 @@ +name: TheButtonMCPlugin +main: tk.sznp.thebuttonautoflair.PluginMain +version: 2.0 +commands: + u: + description: Auto-flair system. Accept or ignore flair. + usage: "&cUsage: /u accept|ignore|opme&r" + nrp: + description: Send message in Out-of-Character + usage: "&cUsage: /nrp &r" + ooc: + description: Send message in Out-of-Character + usage: "&cUsage: /ooc &r" +author: NorbiPeti +depend: [Essentials, Towny] \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/31/20f593fb158b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/31/20f593fb158b00151149b99c05b1b975 new file mode 100644 index 0000000..2a6f01f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/31/20f593fb158b00151149b99c05b1b975 @@ -0,0 +1,322 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + TimerTask tt=new TimerTask() { + public MaybeOfflinePlayer mp; + + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + } + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/31/b04c406a0e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/31/b04c406a0e8b00151149b99c05b1b975 new file mode 100644 index 0000000..787667b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/31/b04c406a0e8b00151149b99c05b1b975 @@ -0,0 +1,321 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw ") + message = "§bhttps://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/§r"; + p.sendMessage(message); + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + p.sendMessage(message); + message = "§bIf you already commented your name, then please wait a few seconds.§r"; + p.sendMessage(message); + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/32/40c22aa12287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/32/40c22aa12287001519af89c6c0264943 new file mode 100644 index 0000000..73882d7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/32/40c22aa12287001519af89c6c0264943 @@ -0,0 +1,577 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "quiz": + DoQuiz(player, args, commandblock); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + public static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/32/a09be810128b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/32/a09be810128b00151149b99c05b1b975 new file mode 100644 index 0000000..495f91b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/32/a09be810128b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"§bIf you'd like your flair displayed ingame, write your §bMinecraft §bname to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§bIf you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/32/a0c729e6158b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/32/a0c729e6158b00151149b99c05b1b975 new file mode 100644 index 0000000..5febe6a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/32/a0c729e6158b00151149b99c05b1b975 @@ -0,0 +1,319 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/34/30320daa0f8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/34/30320daa0f8b00151149b99c05b1b975 new file mode 100644 index 0000000..cafbacd --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/34/30320daa0f8b00151149b99c05b1b975 @@ -0,0 +1,319 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§6If you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/34/509e3a962287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/34/509e3a962287001519af89c6c0264943 new file mode 100644 index 0000000..e15933a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/34/509e3a962287001519af89c6c0264943 @@ -0,0 +1,574 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + public static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/34/60480de22187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/34/60480de22187001519af89c6c0264943 new file mode 100644 index 0000000..e478310 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/34/60480de22187001519af89c6c0264943 @@ -0,0 +1,588 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/35/d0edb6ae2287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/35/d0edb6ae2287001519af89c6c0264943 new file mode 100644 index 0000000..906c66a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/35/d0edb6ae2287001519af89c6c0264943 @@ -0,0 +1,583 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "quiz": + DoQuiz(player, args, null); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + public static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/37/a0d4af822187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/37/a0d4af822187001519af89c6c0264943 new file mode 100644 index 0000000..b21e1aa --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/37/a0d4af822187001519af89c6c0264943 @@ -0,0 +1,584 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/37/c0f63c61e240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/37/c0f63c61e240001514c09dece48b36c7 new file mode 100644 index 0000000..7cad3e7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/37/c0f63c61e240001514c09dece48b36c7 @@ -0,0 +1,451 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + public static ConsoleSender Console; //2015.08.12. + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + //System.out.println("Start: "+start); + if(start==-1+"IGN:".length()) //+length: 2015.08.10. + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + //System.out.println("End: "+end); + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + //System.out.println("IGN: "+ign); + ign = ign.trim(); + //System.out.println("Trimmed IGN: "+ign); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + /*else + flair = "non-presser";*/ + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + //return p.Flair!=null; //2015.08.08. + return p.CommentedOnReddit; //2015.08.10. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + p.FlairRecognised=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(--s)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(??s)§r"; + break; + case "unknown": + if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair + p.FlairDecided=false; + else + p.FlairRecognised=false; + finalflair=""; + break; + default: + //finalflair=""; + //break; + return; + } + /*if(finalflair.length()==0) //<-- 2015.07.20. + return;*/ + p.Flair=finalflair; //2015.08.08. + p.CommentedOnReddit=true; //2015.08.10. + p.UserName=username; //2015.08.08. + if(finalflair.length()==0) //Just for the message + finalflair="undecided"; + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + //return flair==null ? "" : flair; + return flair; //2015.08.10. + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //<-- 2015.08.10. + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //2015.08.10. + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); + p.Flair=s[1]; //2015.08.09. + p.CommentedOnReddit=true; //Kind of + } + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + if(!tempFile.renameTo(inputFile)) + { + inputFile.delete(); + return tempFile.renameTo(inputFile); + } + else + return true; + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/38/5089bf762287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/38/5089bf762287001519af89c6c0264943 new file mode 100644 index 0000000..f650060 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/38/5089bf762287001519af89c6c0264943 @@ -0,0 +1,574 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/38/e08c48b99a8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/38/e08c48b99a8c0015169bb4f96b251538 new file mode 100644 index 0000000..f473ea1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/38/e08c48b99a8c0015169bb4f96b251538 @@ -0,0 +1,336 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Timer timer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3b/b0717c88118b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/3b/b0717c88118b00151149b99c05b1b975 new file mode 100644 index 0000000..ea60810 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3b/b0717c88118b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"§6If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§6If you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3c/d00a0e58e240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/3c/d00a0e58e240001514c09dece48b36c7 new file mode 100644 index 0000000..e68eaa6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3c/d00a0e58e240001514c09dece48b36c7 @@ -0,0 +1,450 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + //System.out.println("Start: "+start); + if(start==-1+"IGN:".length()) //+length: 2015.08.10. + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + //System.out.println("End: "+end); + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + //System.out.println("IGN: "+ign); + ign = ign.trim(); + //System.out.println("Trimmed IGN: "+ign); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + /*else + flair = "non-presser";*/ + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + //return p.Flair!=null; //2015.08.08. + return p.CommentedOnReddit; //2015.08.10. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + p.FlairRecognised=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(--s)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(??s)§r"; + break; + case "unknown": + if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair + p.FlairDecided=false; + else + p.FlairRecognised=false; + finalflair=""; + break; + default: + //finalflair=""; + //break; + return; + } + /*if(finalflair.length()==0) //<-- 2015.07.20. + return;*/ + p.Flair=finalflair; //2015.08.08. + p.CommentedOnReddit=true; //2015.08.10. + p.UserName=username; //2015.08.08. + if(finalflair.length()==0) //Just for the message + finalflair="undecided"; + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + //return flair==null ? "" : flair; + return flair; //2015.08.10. + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //<-- 2015.08.10. + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //2015.08.10. + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); + p.Flair=s[1]; //2015.08.09. + p.CommentedOnReddit=true; //Kind of + } + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + if(!tempFile.renameTo(inputFile)) + { + inputFile.delete(); + return tempFile.renameTo(inputFile); + } + else + return true; + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3e/6022916ee240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/3e/6022916ee240001514c09dece48b36c7 new file mode 100644 index 0000000..75e4c81 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3e/6022916ee240001514c09dece48b36c7 @@ -0,0 +1,452 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + public static ConsoleCommandSender Console; //2015.08.12. + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + //System.out.println("Start: "+start); + if(start==-1+"IGN:".length()) //+length: 2015.08.10. + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + //System.out.println("End: "+end); + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + //System.out.println("IGN: "+ign); + ign = ign.trim(); + //System.out.println("Trimmed IGN: "+ign); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + /*else + flair = "non-presser";*/ + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + //return p.Flair!=null; //2015.08.08. + return p.CommentedOnReddit; //2015.08.10. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + p.FlairRecognised=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(--s)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(??s)§r"; + break; + case "unknown": + if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair + p.FlairDecided=false; + else + p.FlairRecognised=false; + finalflair=""; + break; + default: + //finalflair=""; + //break; + return; + } + /*if(finalflair.length()==0) //<-- 2015.07.20. + return;*/ + p.Flair=finalflair; //2015.08.08. + p.CommentedOnReddit=true; //2015.08.10. + p.UserName=username; //2015.08.08. + if(finalflair.length()==0) //Just for the message + finalflair="undecided"; + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + //return flair==null ? "" : flair; + return flair; //2015.08.10. + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //<-- 2015.08.10. + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //2015.08.10. + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); + p.Flair=s[1]; //2015.08.09. + p.CommentedOnReddit=true; //Kind of + } + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + if(!tempFile.renameTo(inputFile)) + { + inputFile.delete(); + return tempFile.renameTo(inputFile); + } + else + return true; + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3f/606d4a802187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/606d4a802187001519af89c6c0264943 new file mode 100644 index 0000000..1a45a79 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/606d4a802187001519af89c6c0264943 @@ -0,0 +1,496 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3f/b0d12138168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/b0d12138168b00151149b99c05b1b975 new file mode 100644 index 0000000..dc337a3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/b0d12138168b00151149b99c05b1b975 @@ -0,0 +1,323 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + var tt = new TimerTask() { + public MaybeOfflinePlayer mp; + + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp=mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/3f/c0cb3f450e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/c0cb3f450e8b00151149b99c05b1b975 new file mode 100644 index 0000000..83648c5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/3f/c0cb3f450e8b00151149b99c05b1b975 @@ -0,0 +1,322 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + - sendRawMessage(p, json); + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw ") + message = "§bhttps://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/§r"; + p.sendMessage(message); + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + p.sendMessage(message); + message = "§bIf you already commented your name, then please wait a few seconds.§r"; + p.sendMessage(message); + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4/d0391ad32187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/4/d0391ad32187001519af89c6c0264943 new file mode 100644 index 0000000..c4ed7e4 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4/d0391ad32187001519af89c6c0264943 @@ -0,0 +1,588 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/40/5022d9fb2187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/40/5022d9fb2187001519af89c6c0264943 new file mode 100644 index 0000000..6219a81 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/40/5022d9fb2187001519af89c6c0264943 @@ -0,0 +1,588 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/41/c0bb756d9b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/41/c0bb756d9b8c0015169bb4f96b251538 new file mode 100644 index 0000000..1eef614 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/41/c0bb756d9b8c0015169bb4f96b251538 @@ -0,0 +1,338 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + private Timer Ftimer; + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + if (Ftimer != null) + Ftimer.cancel(); + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Ftimer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (ActiveF) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + }; + Ftimer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/41/e0ddf8b42087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/41/e0ddf8b42087001519af89c6c0264943 new file mode 100644 index 0000000..c69af8f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/41/e0ddf8b42087001519af89c6c0264943 @@ -0,0 +1,496 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index=Integer.parseInt(args[2]); + if(index>100) + break; + while(PluginMain.AnnounceMessages.size()<=) + + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/45/d00b6c840c8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/45/d00b6c840c8b00151149b99c05b1b975 new file mode 100644 index 0000000..76a001d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/45/d00b6c840c8b00151149b99c05b1b975 @@ -0,0 +1,302 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/46/50ec87042387001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/46/50ec87042387001519af89c6c0264943 new file mode 100644 index 0000000..f82a5f8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/46/50ec87042387001519af89c6c0264943 @@ -0,0 +1,306 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.IOUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.lang.String; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. + // A user, which flair isn't obtainable: + // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + public static PluginMain Instance; + public static ConsoleCommandSender Console; // 2015.08.12. + + // Fired when plugin is first enabled + @Override + public void onEnable() { + System.out.println("The Button Minecraft server plugin"); + getServer().getPluginManager().registerEvents(new PlayerListener(), + this); + Commands comm = new Commands(); + this.getCommand("u").setExecutor(comm); + this.getCommand("u").setUsage( + this.getCommand("u").getUsage().replace('&', '§')); + this.getCommand("nrp").setExecutor(comm); + this.getCommand("nrp").setUsage( + this.getCommand("nrp").getUsage().replace('&', '§')); + this.getCommand("ooc").setExecutor(comm); + this.getCommand("ooc").setUsage( + this.getCommand("ooc").getUsage().replace('&', '§')); + this.getCommand("skype").setExecutor(comm); + Instance = this; // 2015.08.08. + Console = this.getServer().getConsoleSender(); // 2015.08.12. + LoadFiles(false); // 2015.08.09. + Runnable r = new Runnable() { + public void run() { + ThreadMethod(); + } + }; + Thread t = new Thread(r); + t.start(); + r = new Runnable() { + public void run() { + AnnouncerThread.Run(); + } + }; + t = new Thread(r); + t.start(); + } + + public Boolean stop = false; + + // Fired when plugin is disabled + @Override + public void onDisable() { + SaveFiles(); // 2015.08.09. + stop = true; + } + + public void ThreadMethod() // <-- 2015.07.16. + { + while (!stop) { + try { + String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json = new JSONArray(body).getJSONObject(1) + .getJSONObject("data").getJSONArray("children"); + for (Object obj : json) { + JSONObject item = (JSONObject) obj; + String author = item.getJSONObject("data").getString( + "author"); + String ign = item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if (start == -1 + "IGN:".length()) // +length: 2015.08.10. + continue; // 2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end = ign.indexOf('\n', start); // 2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); + if (mp == null) + continue; + if (HasIGFlair(mp.UUID)) + continue; + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString( + "http://karmadecay.com/thebutton-data.php?users=" + + author).replace("\"", "").split(":"); + String flair; + if (flairdata.length > 1) // 2015.07.15. + flair = flairdata[1]; + else + flair = ""; + if (flair != "-1") + flair = flair + "s"; + String flairclass; + if (flairdata.length > 2) + flairclass = flairdata[2]; + else + flairclass = "unknown"; + SetFlair(mp.UUID, flair, flairclass, author); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } catch (Exception e) { + // System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + } + + public static Exception LastException; // 2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, + IOException { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors = new HashMap(); // 2015.07.20. + + public Boolean HasIGFlair(UUID uuid) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + return p.CommentedOnReddit; // 2015.08.10. + } + + public void SetFlair(UUID uuid, String text, String flairclass, + String username) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + String finalflair; + p.FlairDecided = true; + p.FlairRecognised = true; + switch (flairclass) { + case "press-1": + finalflair = "§c(" + text + ")§r"; + break; + case "press-2": + finalflair = "§6(" + text + ")§r"; + break; + case "press-3": + finalflair = "§e(" + text + ")§r"; + break; + case "press-4": + finalflair = "§a(" + text + ")§r"; + break; + case "press-5": + finalflair = "§9(" + text + ")§r"; + break; + case "press-6": + finalflair = "§5(" + text + ")§r"; + break; + case "no-press": + finalflair = "§7(--s)§r"; + break; + case "cheater": + finalflair = "§5(" + text + ")§r"; + break; + case "cant-press": // 2015.08.08. + finalflair = "§r(??s)§r"; + break; + case "unknown": + if (text.equals("-1")) // If true, only non-presser/can't press; if + // false, any flair + p.FlairDecided = false; + else + p.FlairRecognised = false; + finalflair = ""; + break; + default: + return; + } + p.Flair = finalflair; // 2015.08.08. + p.CommentedOnReddit = true; // 2015.08.10. + p.UserName = username; // 2015.08.08. + System.out.println("Added flair for " + p.PlayerName); + AppendPlayerDisplayFlair(p, Bukkit.getPlayer(uuid)); + } + + public static String GetFlair(Player player) { // 2015.07.16. + String flair = MaybeOfflinePlayer.AllPlayers.get(player.getUniqueId()).Flair; // 2015.08.08. + return flair; // 2015.08.10. + } + + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, + Player p) // <-- 2015.08.09. + { + + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).IgnoredFlair) + return; + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).AcceptedFlair) { + if (!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. + } else + p.sendMessage("§9Are you Reddit user " + player.UserName + + "?§r §6Type /u accept or /u ignore§r"); + } + + public static String GetColorForTown(String townname) { // 2015.07.20. + if (TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static Collection GetPlayers() { + return Instance.getServer().getOnlinePlayers(); + } + + public static ArrayList AnnounceMessages = new ArrayList<>(); + public static int AnnounceTime = 15 * 60 * 1000; + + public static void LoadFiles(boolean reload) // <-- 2015.08.09. + { + if (reload) { // 2015.08.09. + System.out + .println("The Button Minecraft plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + AnnounceMessages.clear(); + Commands.Quiz.clear(); + } + System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("announcemessages.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsaccepted.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsignored.txt"); + if (file.exists()) + file.delete(); + file = new File("thebuttonmc.yml"); + if (file.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + yc.load(file); + MaybeOfflinePlayer.Load(yc); + PlayerListener.NotificationSound = yc + .getString("notificationsound"); + PlayerListener.NotificationPitch = yc + .getDouble("notificationpitch"); + AnnounceTime = yc.getInt("announcetime"); + AnnounceMessages.addAll(yc.getStringList("announcements")); + Commands.Quiz.addAll(yc.getStringList("quiz")); + } + System.out.println("The Button Minecraft plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } catch (InvalidConfigurationException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static void SaveFiles() // <-- 2015.08.09. + { + System.out.println("Saving files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("thebuttonmc.yml"); + YamlConfiguration yc = new YamlConfiguration(); + MaybeOfflinePlayer.Save(yc); + yc.set("notificationsound", PlayerListener.NotificationSound); + yc.set("notificationpitch", PlayerListener.NotificationPitch); + yc.set("announcetime", AnnounceTime); + yc.set("announcements", AnnounceMessages); + yc.set("quiz", Commands.Quiz); + yc.save(file); + System.out.println("The Button Minecraft plugin saved files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/46/d0c39d6c2087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/46/d0c39d6c2087001519af89c6c0264943 new file mode 100644 index 0000000..165abae --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/46/d0c39d6c2087001519af89c6c0264943 @@ -0,0 +1,491 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§');) + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/47/509b62022387001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/47/509b62022387001519af89c6c0264943 new file mode 100644 index 0000000..c25c622 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/47/509b62022387001519af89c6c0264943 @@ -0,0 +1,305 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.IOUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.lang.String; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. + // A user, which flair isn't obtainable: + // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + public static PluginMain Instance; + public static ConsoleCommandSender Console; // 2015.08.12. + + // Fired when plugin is first enabled + @Override + public void onEnable() { + System.out.println("The Button Minecraft server plugin"); + getServer().getPluginManager().registerEvents(new PlayerListener(), + this); + Commands comm = new Commands(); + this.getCommand("u").setExecutor(comm); + this.getCommand("u").setUsage( + this.getCommand("u").getUsage().replace('&', '§')); + this.getCommand("nrp").setExecutor(comm); + this.getCommand("nrp").setUsage( + this.getCommand("nrp").getUsage().replace('&', '§')); + this.getCommand("ooc").setExecutor(comm); + this.getCommand("ooc").setUsage( + this.getCommand("ooc").getUsage().replace('&', '§')); + this.getCommand("skype").setExecutor(comm); + Instance = this; // 2015.08.08. + Console = this.getServer().getConsoleSender(); // 2015.08.12. + LoadFiles(false); // 2015.08.09. + Runnable r = new Runnable() { + public void run() { + ThreadMethod(); + } + }; + Thread t = new Thread(r); + t.start(); + r = new Runnable() { + public void run() { + AnnouncerThread.Run(); + } + }; + t = new Thread(r); + t.start(); + } + + public Boolean stop = false; + + // Fired when plugin is disabled + @Override + public void onDisable() { + SaveFiles(); // 2015.08.09. + stop = true; + } + + public void ThreadMethod() // <-- 2015.07.16. + { + while (!stop) { + try { + String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json = new JSONArray(body).getJSONObject(1) + .getJSONObject("data").getJSONArray("children"); + for (Object obj : json) { + JSONObject item = (JSONObject) obj; + String author = item.getJSONObject("data").getString( + "author"); + String ign = item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if (start == -1 + "IGN:".length()) // +length: 2015.08.10. + continue; // 2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end = ign.indexOf('\n', start); // 2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); + if (mp == null) + continue; + if (HasIGFlair(mp.UUID)) + continue; + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString( + "http://karmadecay.com/thebutton-data.php?users=" + + author).replace("\"", "").split(":"); + String flair; + if (flairdata.length > 1) // 2015.07.15. + flair = flairdata[1]; + else + flair = ""; + if (flair != "-1") + flair = flair + "s"; + String flairclass; + if (flairdata.length > 2) + flairclass = flairdata[2]; + else + flairclass = "unknown"; + SetFlair(mp.UUID, flair, flairclass, author); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } catch (Exception e) { + // System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + } + + public static Exception LastException; // 2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, + IOException { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors = new HashMap(); // 2015.07.20. + + public Boolean HasIGFlair(UUID uuid) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + return p.CommentedOnReddit; // 2015.08.10. + } + + public void SetFlair(UUID uuid, String text, String flairclass, + String username) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + String finalflair; + p.FlairDecided = true; + p.FlairRecognised = true; + switch (flairclass) { + case "press-1": + finalflair = "§c(" + text + ")§r"; + break; + case "press-2": + finalflair = "§6(" + text + ")§r"; + break; + case "press-3": + finalflair = "§e(" + text + ")§r"; + break; + case "press-4": + finalflair = "§a(" + text + ")§r"; + break; + case "press-5": + finalflair = "§9(" + text + ")§r"; + break; + case "press-6": + finalflair = "§5(" + text + ")§r"; + break; + case "no-press": + finalflair = "§7(--s)§r"; + break; + case "cheater": + finalflair = "§5(" + text + ")§r"; + break; + case "cant-press": // 2015.08.08. + finalflair = "§r(??s)§r"; + break; + case "unknown": + if (text.equals("-1")) // If true, only non-presser/can't press; if + // false, any flair + p.FlairDecided = false; + else + p.FlairRecognised = false; + finalflair = ""; + break; + default: + return; + } + p.Flair = finalflair; // 2015.08.08. + p.CommentedOnReddit = true; // 2015.08.10. + p.UserName = username; // 2015.08.08. + System.out.println("Added flair for " + p.PlayerName); + AppendPlayerDisplayFlair(p, Bukkit.getPlayer(uuid)); + } + + public static String GetFlair(Player player) { // 2015.07.16. + String flair = MaybeOfflinePlayer.AllPlayers.get(player.getUniqueId()).Flair; // 2015.08.08. + return flair; // 2015.08.10. + } + + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, + Player p) // <-- 2015.08.09. + { + + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).IgnoredFlair) + return; + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).AcceptedFlair) { + if (!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. + } else + p.sendMessage("§9Are you Reddit user " + player.UserName + + "?§r §6Type /u accept or /u ignore§r"); + } + + public static String GetColorForTown(String townname) { // 2015.07.20. + if (TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static Collection GetPlayers() { + return Instance.getServer().getOnlinePlayers(); + } + + public static ArrayList AnnounceMessages = new ArrayList<>(); + public static int AnnounceTime = 15 * 60 * 1000; + + public static void LoadFiles(boolean reload) // <-- 2015.08.09. + { + if (reload) { // 2015.08.09. + System.out + .println("The Button Minecraft plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + AnnounceMessages.clear(); + Commands.Quiz.clear(); + } + System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("announcemessages.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsaccepted.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsignored.txt"); + if (file.exists()) + file.delete(); + file = new File("thebuttonmc.yml"); + if (file.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + yc.load(file); + MaybeOfflinePlayer.Load(yc); + PlayerListener.NotificationSound = yc + .getString("notificationsound"); + PlayerListener.NotificationPitch = yc + .getDouble("notificationpitch"); + AnnounceTime = yc.getInt("announcetime"); + AnnounceMessages.addAll(yc.getStringList("announcements")); + Commands.Quiz.addAll(yc.getStringList("quiz")); + } + System.out.println("The Button Minecraft plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } catch (InvalidConfigurationException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static void SaveFiles() // <-- 2015.08.09. + { + System.out.println("Saving files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("thebuttonmc.yml"); + YamlConfiguration yc = new YamlConfiguration(); + MaybeOfflinePlayer.Save(yc); + yc.set("notificationsound", PlayerListener.NotificationSound); + yc.set("notificationpitch", PlayerListener.NotificationPitch); + yc.set("announcetime", AnnounceTime); + yc.set("announcements", AnnounceMessages); + yc.save(file); + System.out.println("The Button Minecraft plugin saved files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/48/b0715a760e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/48/b0715a760e8b00151149b99c05b1b975 new file mode 100644 index 0000000..96be6c6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/48/b0715a760e8b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw "+mp.PlayerName+" "+json); + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + message = "§bIf you already commented your name, then please wait a few seconds.§r"; + p.sendMessage(message); + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4a/c036c9a02187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/4a/c036c9a02187001519af89c6c0264943 new file mode 100644 index 0000000..d643bd6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4a/c036c9a02187001519af89c6c0264943 @@ -0,0 +1,584 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4b/40b1bfa8755d001515f3fd278c34f57e b/.metadata/.plugins/org.eclipse.core.resources/.history/4b/40b1bfa8755d001515f3fd278c34f57e new file mode 100644 index 0000000..2d88af8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4b/40b1bfa8755d001515f3fd278c34f57e @@ -0,0 +1,465 @@ +package tk.sznp.thebuttonautoflair; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; +import org.apache.commons.io.IOUtils; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.lang.String; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. + // A user, which flair isn't obtainable: + // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + public static PluginMain Instance; + public static ConsoleCommandSender Console; // 2015.08.12. + + // Fired when plugin is first enabled + @Override + public void onEnable() { + System.out.println("The Button Minecraft server plugin"); + getServer().getPluginManager().registerEvents(new PlayerListener(), + this); + Commands comm = new Commands(); + this.getCommand("u").setExecutor(comm); + this.getCommand("u").setUsage( + this.getCommand("u").getUsage().replace('&', '§')); + this.getCommand("nrp").setExecutor(comm); + this.getCommand("nrp").setUsage( + this.getCommand("nrp").getUsage().replace('&', '§')); + this.getCommand("ooc").setExecutor(comm); + this.getCommand("ooc").setUsage( + this.getCommand("ooc").getUsage().replace('&', '§')); + Instance = this; // 2015.08.08. + Console = this.getServer().getConsoleSender(); // 2015.08.12. + LoadFiles(false); // 2015.08.09. + Runnable r = new Runnable() { + public void run() { + ThreadMethod(); + } + }; + Thread t = new Thread(r); + t.start(); + r = new Runnable() { + public void run() { + AnnouncerThread.Run(); + } + }; + t = new Thread(r); + t.start(); + } + + public Boolean stop = false; + + // Fired when plugin is disabled + @Override + public void onDisable() { + SaveFiles(); // 2015.08.09. + stop = true; + } + + public void ThreadMethod() // <-- 2015.07.16. + { + while (!stop) { + try { + String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json = new JSONArray(body).getJSONObject(1) + .getJSONObject("data").getJSONArray("children"); + for (Object obj : json) { + JSONObject item = (JSONObject) obj; + String author = item.getJSONObject("data").getString( + "author"); + String ign = item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if (start == -1 + "IGN:".length()) // +length: 2015.08.10. + continue; // 2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end = ign.indexOf('\n', start); // 2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + if (HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString( + "http://karmadecay.com/thebutton-data.php?users=" + + author).replace("\"", "").split(":"); + String flair; + if (flairdata.length > 1) // 2015.07.15. + flair = flairdata[1]; + else + flair = ""; + if (flair != "-1") + flair = flair + "s"; + String flairclass; + if (flairdata.length > 2) + flairclass = flairdata[2]; + else + flairclass = "unknown"; + SetFlair(ign, flair, flairclass, author); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } catch (Exception e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + } + + public static Exception LastException; // 2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, + IOException { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors = new HashMap(); // 2015.07.20. + + public Boolean HasIGFlair(String playername) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(playername); // 2015.08.08. + return p.CommentedOnReddit; // 2015.08.10. + } + + public void SetFlair(String playername, String text, String flairclass, + String username) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(playername); // 2015.08.08. + String finalflair; + p.FlairDecided = true; + p.FlairRecognised = true; + switch (flairclass) { + case "press-1": + finalflair = "§c(" + text + ")§r"; + break; + case "press-2": + finalflair = "§6(" + text + ")§r"; + break; + case "press-3": + finalflair = "§e(" + text + ")§r"; + break; + case "press-4": + finalflair = "§a(" + text + ")§r"; + break; + case "press-5": + finalflair = "§9(" + text + ")§r"; + break; + case "press-6": + finalflair = "§5(" + text + ")§r"; + break; + case "no-press": + finalflair = "§7(--s)§r"; + break; + case "cheater": + finalflair = "§5(" + text + ")§r"; + break; + case "cant-press": // 2015.08.08. + finalflair = "§r(??s)§r"; + break; + case "unknown": + if (text.equals("-1")) // If true, only non-presser/can't press; if + // false, any flair + p.FlairDecided = false; + else + p.FlairRecognised = false; + finalflair = ""; + break; + default: + return; + } + p.Flair = finalflair; // 2015.08.08. + p.CommentedOnReddit = true; // 2015.08.10. + p.UserName = username; // 2015.08.08. + for (Player player : getServer().getOnlinePlayers()) // <-- 2015.08.08. + { + if (player.getName().equals(playername)) { + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) { // 2015.07.16. + String flair = MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; // 2015.08.08. + // return flair==null ? "" : flair; + return flair; // 2015.08.10. + } + + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, + Player p) // <-- 2015.08.09. + { + + if (MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if (MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) { + if (!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. + } else + p.sendMessage("§9Are you Reddit user " + player.UserName + + "?§r §6Type /u accept or /u ignore§r"); + } + + public static String GetColorForTown(String townname) { // 2015.07.20. + if (TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static String GetPlayerTown(Player player) { // 2015.07.20. + try { + Town town = WorldCoord.parseWorldCoord(player).getTownBlock() + .getTown(); // TODO + return town.getName(); + } catch (Exception e) { + return ""; + } + } + + public static Collection GetPlayers() { + return Instance.getServer().getOnlinePlayers(); + } + + public static ArrayList AnnounceMessages = new ArrayList<>(); + public static int AnnounceTime = 15 * 60 * 1000; + + public static void LoadFiles(boolean reload) // <-- 2015.08.09. + { + if (reload) { // 2015.08.09. + System.out + .println("The Button Minecraft plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + AnnounceMessages.clear(); + } + System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("flairsaccepted.txt"); + if (file.exists()) { + BufferedReader br = new BufferedReader(new FileReader( + "flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) { + String name = line.replace("\n", ""); + // System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair = true; // 2015.08.08. + } + br.close(); + } + file = new File("flairsignored.txt"); + if (file.exists()) { + BufferedReader br = new BufferedReader(new FileReader( + "flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) { + String name = line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair = true; // 2015.08.08. + } + br.close(); + } + file = new File("autoflairconfig.txt"); + if (file.exists()) { + BufferedReader br = new BufferedReader(new FileReader(file)); + String line; + while ((line = br.readLine()) != null) { + String[] s = line.split(" "); + if (s.length >= 2) // <-- 2015.08.10. + TownColors.put(s[0], s[1]); + } + br.close(); + } + file = new File("customflairs.txt"); // 2015.08.09. + if (file.exists()) { + BufferedReader br = new BufferedReader(new FileReader(file)); + String line; + while ((line = br.readLine()) != null) { + String[] s = line.split(" "); + if (s.length >= 2) // 2015.08.10. + { + MaybeOfflinePlayer p = MaybeOfflinePlayer + .AddPlayerIfNeeded(s[0]); + p.Flair = s[1]; // 2015.08.09. + p.CommentedOnReddit = true; // Kind of + p.FlairDecided = true; + p.FlairRecognised = true; + } + } + br.close(); + } + file = new File("notificationsound.txt"); // 2015.08.09. + if (file.exists()) { + BufferedReader br = new BufferedReader(new FileReader(file)); + String line = br.readLine(); + String[] split = line.split(" "); + PlayerListener.NotificationSound = split[0]; + PlayerListener.NotificationPitch = Float.parseFloat(split[1]); + br.close(); + } + file = new File("announcemessages.txt"); // 2015.08.09. + if (file.exists()) { + BufferedReader br = new BufferedReader(new FileReader(file)); + String line; + boolean first = true; + while ((line = br.readLine()) != null) { + if (first) { + AnnounceTime = Integer.parseInt(line.trim()); + first = false; + } else + AnnounceMessages.add(line.trim()); + } + br.close(); + } else { + // Write time + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file)); + bw.write(AnnounceTime + "\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + System.out.println("The Button Minecraft plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static void SaveFiles() // <-- 2015.08.09. + { + try { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } catch (Exception e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + try { + File file = new File("flairsaccepted.txt"); + BufferedWriter bw = new BufferedWriter(new FileWriter(file, true)); + for (MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers + .values()) // <-- 2015.08.08. + { + if (!player.AcceptedFlair) + continue; // 2015.08.08. + bw.write(player.PlayerName + "\n"); + } + bw.close(); + file = new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for (MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers + .values()) // <-- 2015.08.08. + { + if (!player.IgnoredFlair) + continue; // 2015.08.08. + bw.write(player.PlayerName + "\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static boolean RemoveLineFromFile(String file, String line) { // 2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if (!inputFile.exists()) + return true; // 2015.08.10. + + try { + BufferedReader reader = new BufferedReader( + new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while ((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + if (trimmedLine.split(" ")[0].equals(lineToRemove)) + continue; // 2015.08.17. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + if (!tempFile.renameTo(inputFile)) { + inputFile.delete(); + return tempFile.renameTo(inputFile); + } else + return true; + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + return false; + } + + public static boolean RemoveLineFromFile(String file, int index) { + File inputFile = new File(file); + File tempFile = new File("_temp2.txt"); + + if (!inputFile.exists()) + return true; // 2015.08.10. + + try { + BufferedReader reader = new BufferedReader( + new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String currentLine; + int i = 0; + + while ((currentLine = reader.readLine()) != null) { + if (i++ == index) + continue; + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + if (!tempFile.renameTo(inputFile)) { + inputFile.delete(); + return tempFile.renameTo(inputFile); + } else + return true; + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4c/e09817299b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/4c/e09817299b8c0015169bb4f96b251538 new file mode 100644 index 0000000..9c86abb --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4c/e09817299b8c0015169bb4f96b251538 @@ -0,0 +1,335 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + private Timer Ftimer; + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Ftimer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (ActiveF) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + }; + Ftimer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4d/c0d5180e2087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/4d/c0d5180e2087001519af89c6c0264943 new file mode 100644 index 0000000..286977e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4d/c0d5180e2087001519af89c6c0264943 @@ -0,0 +1,491 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "&cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/4e/40170f730e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/4e/40170f730e8b00151149b99c05b1b975 new file mode 100644 index 0000000..84f4288 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/4e/40170f730e8b00151149b99c05b1b975 @@ -0,0 +1,319 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw "+mp.PlayerName+" "+json); + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + p.sendMessage(message); + message = "§bIf you already commented your name, then please wait a few seconds.§r"; + p.sendMessage(message); + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/51/408cc87e9b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/51/408cc87e9b8c0015169bb4f96b251538 new file mode 100644 index 0000000..d146e2f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/51/408cc87e9b8c0015169bb4f96b251538 @@ -0,0 +1,328 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + private Timer Ftimer; + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + if (Ftimer != null) + Ftimer.cancel(); + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Ftimer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (ActiveF) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + }; + Ftimer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/53/40b494f5e540001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/53/40b494f5e540001514c09dece48b36c7 new file mode 100644 index 0000000..d9ec7da --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/53/40b494f5e540001514c09dece48b36c7 @@ -0,0 +1,72 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(arg0, arg1, arg2, arg3) + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/53/d0c1dad6e440001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/53/d0c1dad6e440001514c09dece48b36c7 new file mode 100644 index 0000000..159e3e4 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/53/d0c1dad6e440001514c09dece48b36c7 @@ -0,0 +1,296 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/57/2084190f168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/57/2084190f168b00151149b99c05b1b975 new file mode 100644 index 0000000..91fbd1b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/57/2084190f168b00151149b99c05b1b975 @@ -0,0 +1,323 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + TimerTask tt = new TimerTask() { + public MaybeOfflinePlayer mp; + + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp=mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/008c7edd2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/008c7edd2d53001516cdaaef55e27ba4 new file mode 100644 index 0000000..9a58544 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/008c7edd2d53001516cdaaef55e27ba4 @@ -0,0 +1,16 @@ +name: TheButtonMCPlugin +main: tk.sznp.thebuttonautoflair.PluginMain +version: 2.0 +commands: + u: + description: Auto-flair system. Accept or ignore flair. + usage: "&cUsage: /u accept|ignore|opme&r" + nrp: + description: Send message in Out-of-Character + usage: "&cUsage: /nrp &r" + ooc: + description: Send message in Out-of-Character + usage: "&cUsage: /ooc &r" +author: NorbiPeti +depend: [Essentials, Towny] +s \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0d83cf9de40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0d83cf9de40001514c09dece48b36c7 new file mode 100644 index 0000000..68a104f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5b/e0d83cf9de40001514c09dece48b36c7 @@ -0,0 +1,297 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + System.out.println(message); + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5d/30629c52168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/5d/30629c52168b00151149b99c05b1b975 new file mode 100644 index 0000000..91fbd1b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5d/30629c52168b00151149b99c05b1b975 @@ -0,0 +1,323 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + TimerTask tt = new TimerTask() { + public MaybeOfflinePlayer mp; + + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp=mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5e/c0d6d38be640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/5e/c0d6d38be640001514c09dece48b36c7 new file mode 100644 index 0000000..cbc9ea1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5e/c0d6d38be640001514c09dece48b36c7 @@ -0,0 +1,73 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f); //2015.08.12. + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/5f/50257859e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/5f/50257859e640001514c09dece48b36c7 new file mode 100644 index 0000000..c192f31 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/5f/50257859e640001514c09dece48b36c7 @@ -0,0 +1,72 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(p.getLocation(), , arg2, arg3) + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6/3059a485168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/6/3059a485168b00151149b99c05b1b975 new file mode 100644 index 0000000..29d7d48 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6/3059a485168b00151149b99c05b1b975 @@ -0,0 +1,13 @@ +package tk.sznp.thebuttonautoflair; + +import java.util.TimerTask; + +public class PlayerJoinTimerTask extends TimerTask { + + @Override + public void run() { + // TODO Auto-generated method stub + + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6/50be8b389b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/6/50be8b389b8c0015169bb4f96b251538 new file mode 100644 index 0000000..c14fab2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6/50be8b389b8c0015169bb4f96b251538 @@ -0,0 +1,337 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + private Timer Ftimer; + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + if(Ftimer!=null) + Ftimer.cancel(); + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Ftimer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (ActiveF) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + }; + Ftimer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/60/c08d9b862187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/60/c08d9b862187001519af89c6c0264943 new file mode 100644 index 0000000..1a45a79 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/60/c08d9b862187001519af89c6c0264943 @@ -0,0 +1,496 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/61/b05b2a30138b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/61/b05b2a30138b00151149b99c05b1b975 new file mode 100644 index 0000000..110ed43 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/61/b05b2a30138b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "/tellraw @p ["",{"text":"If you'd like your flair displayed ingame, write your Minecraft name to ","color":"aqua"},{"text":"[this thread].","color":"aqua","clickEvent":{"action":"open_url","value":"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/"},"hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Click here to go to the Reddit thread","color":"aqua"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§bIf you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/63/d06551420941001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/63/d06551420941001514c09dece48b36c7 new file mode 100644 index 0000000..e93fc19 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/63/d06551420941001514c09dece48b36c7 @@ -0,0 +1,74 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + if(message.contains(p.getName())) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/65/50f69b6c168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/65/50f69b6c168b00151149b99c05b1b975 new file mode 100644 index 0000000..e69de29 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/67/c0952ea8e240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/67/c0952ea8e240001514c09dece48b36c7 new file mode 100644 index 0000000..340df89 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/67/c0952ea8e240001514c09dece48b36c7 @@ -0,0 +1,298 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message) + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6a/406f8416e340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/6a/406f8416e340001514c09dece48b36c7 new file mode 100644 index 0000000..4f33dd3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6a/406f8416e340001514c09dece48b36c7 @@ -0,0 +1,298 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6b/700669952d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/6b/700669952d53001516cdaaef55e27ba4 new file mode 100644 index 0000000..5b3245c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6b/700669952d53001516cdaaef55e27ba4 @@ -0,0 +1,13 @@ +name: TheButtonMCPlugin +main: tk.sznp.thebuttonautoflair.PluginMain +version: 2.0 +commands: + u: + description: Auto-flair system. Accept or ignore flair. + usage: "&cUsage: /u accept|ignore|opme&r" + nrp: + description: Send message in Out-of-Character + usage: "&cUsage: /nrp &r" + ooc: + description: Send message in Out-of-Character + usage: "&cUsage: /ooc &r" \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6b/c000fac32187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/6b/c000fac32187001519af89c6c0264943 new file mode 100644 index 0000000..b17eebe --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6b/c000fac32187001519af89c6c0264943 @@ -0,0 +1,587 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz=new ArrayList<>(); + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/506c7d4ee140001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/506c7d4ee140001514c09dece48b36c7 new file mode 100644 index 0000000..8742a9c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/506c7d4ee140001514c09dece48b36c7 @@ -0,0 +1,71 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6c/b03244ed9a8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/b03244ed9a8c0015169bb4f96b251538 new file mode 100644 index 0000000..4133f3d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6c/b03244ed9a8c0015169bb4f96b251538 @@ -0,0 +1,335 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Timer timer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + timer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6e/60f4f3db2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/6e/60f4f3db2d53001516cdaaef55e27ba4 new file mode 100644 index 0000000..f7e6157 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6e/60f4f3db2d53001516cdaaef55e27ba4 @@ -0,0 +1,14 @@ +name: TheButtonMCPlugin +main: tk.sznp.thebuttonautoflair.PluginMain +version: 2.0 +commands: + u: + description: Auto-flair system. Accept or ignore flair. + usage: "&cUsage: /u accept|ignore|opme&r" + nrp: + description: Send message in Out-of-Character + usage: "&cUsage: /nrp &r" + ooc: + description: Send message in Out-of-Character + usage: "&cUsage: /ooc &r" +author: NorbiPeti \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6e/d0c7e2022387001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/6e/d0c7e2022387001519af89c6c0264943 new file mode 100644 index 0000000..0ffda58 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6e/d0c7e2022387001519af89c6c0264943 @@ -0,0 +1,306 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.IOUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.lang.String; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. + // A user, which flair isn't obtainable: + // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + public static PluginMain Instance; + public static ConsoleCommandSender Console; // 2015.08.12. + + // Fired when plugin is first enabled + @Override + public void onEnable() { + System.out.println("The Button Minecraft server plugin"); + getServer().getPluginManager().registerEvents(new PlayerListener(), + this); + Commands comm = new Commands(); + this.getCommand("u").setExecutor(comm); + this.getCommand("u").setUsage( + this.getCommand("u").getUsage().replace('&', '§')); + this.getCommand("nrp").setExecutor(comm); + this.getCommand("nrp").setUsage( + this.getCommand("nrp").getUsage().replace('&', '§')); + this.getCommand("ooc").setExecutor(comm); + this.getCommand("ooc").setUsage( + this.getCommand("ooc").getUsage().replace('&', '§')); + this.getCommand("skype").setExecutor(comm); + Instance = this; // 2015.08.08. + Console = this.getServer().getConsoleSender(); // 2015.08.12. + LoadFiles(false); // 2015.08.09. + Runnable r = new Runnable() { + public void run() { + ThreadMethod(); + } + }; + Thread t = new Thread(r); + t.start(); + r = new Runnable() { + public void run() { + AnnouncerThread.Run(); + } + }; + t = new Thread(r); + t.start(); + } + + public Boolean stop = false; + + // Fired when plugin is disabled + @Override + public void onDisable() { + SaveFiles(); // 2015.08.09. + stop = true; + } + + public void ThreadMethod() // <-- 2015.07.16. + { + while (!stop) { + try { + String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json = new JSONArray(body).getJSONObject(1) + .getJSONObject("data").getJSONArray("children"); + for (Object obj : json) { + JSONObject item = (JSONObject) obj; + String author = item.getJSONObject("data").getString( + "author"); + String ign = item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if (start == -1 + "IGN:".length()) // +length: 2015.08.10. + continue; // 2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end = ign.indexOf('\n', start); // 2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); + if (mp == null) + continue; + if (HasIGFlair(mp.UUID)) + continue; + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString( + "http://karmadecay.com/thebutton-data.php?users=" + + author).replace("\"", "").split(":"); + String flair; + if (flairdata.length > 1) // 2015.07.15. + flair = flairdata[1]; + else + flair = ""; + if (flair != "-1") + flair = flair + "s"; + String flairclass; + if (flairdata.length > 2) + flairclass = flairdata[2]; + else + flairclass = "unknown"; + SetFlair(mp.UUID, flair, flairclass, author); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } catch (Exception e) { + // System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + } + + public static Exception LastException; // 2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, + IOException { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors = new HashMap(); // 2015.07.20. + + public Boolean HasIGFlair(UUID uuid) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + return p.CommentedOnReddit; // 2015.08.10. + } + + public void SetFlair(UUID uuid, String text, String flairclass, + String username) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + String finalflair; + p.FlairDecided = true; + p.FlairRecognised = true; + switch (flairclass) { + case "press-1": + finalflair = "§c(" + text + ")§r"; + break; + case "press-2": + finalflair = "§6(" + text + ")§r"; + break; + case "press-3": + finalflair = "§e(" + text + ")§r"; + break; + case "press-4": + finalflair = "§a(" + text + ")§r"; + break; + case "press-5": + finalflair = "§9(" + text + ")§r"; + break; + case "press-6": + finalflair = "§5(" + text + ")§r"; + break; + case "no-press": + finalflair = "§7(--s)§r"; + break; + case "cheater": + finalflair = "§5(" + text + ")§r"; + break; + case "cant-press": // 2015.08.08. + finalflair = "§r(??s)§r"; + break; + case "unknown": + if (text.equals("-1")) // If true, only non-presser/can't press; if + // false, any flair + p.FlairDecided = false; + else + p.FlairRecognised = false; + finalflair = ""; + break; + default: + return; + } + p.Flair = finalflair; // 2015.08.08. + p.CommentedOnReddit = true; // 2015.08.10. + p.UserName = username; // 2015.08.08. + System.out.println("Added flair for " + p.PlayerName); + AppendPlayerDisplayFlair(p, Bukkit.getPlayer(uuid)); + } + + public static String GetFlair(Player player) { // 2015.07.16. + String flair = MaybeOfflinePlayer.AllPlayers.get(player.getUniqueId()).Flair; // 2015.08.08. + return flair; // 2015.08.10. + } + + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, + Player p) // <-- 2015.08.09. + { + + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).IgnoredFlair) + return; + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).AcceptedFlair) { + if (!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. + } else + p.sendMessage("§9Are you Reddit user " + player.UserName + + "?§r §6Type /u accept or /u ignore§r"); + } + + public static String GetColorForTown(String townname) { // 2015.07.20. + if (TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static Collection GetPlayers() { + return Instance.getServer().getOnlinePlayers(); + } + + public static ArrayList AnnounceMessages = new ArrayList<>(); + public static int AnnounceTime = 15 * 60 * 1000; + + public static void LoadFiles(boolean reload) // <-- 2015.08.09. + { + if (reload) { // 2015.08.09. + System.out + .println("The Button Minecraft plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + AnnounceMessages.clear(); + Commands.Quiz.clear(); + } + System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("announcemessages.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsaccepted.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsignored.txt"); + if (file.exists()) + file.delete(); + file = new File("thebuttonmc.yml"); + if (file.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + yc.load(file); + MaybeOfflinePlayer.Load(yc); + PlayerListener.NotificationSound = yc + .getString("notificationsound"); + PlayerListener.NotificationPitch = yc + .getDouble("notificationpitch"); + AnnounceTime = yc.getInt("announcetime"); + AnnounceMessages.addAll(yc.getStringList("announcements")); + Commands.Quiz.addAll(yc.getStringList("quiz")); + } + System.out.println("The Button Minecraft plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } catch (InvalidConfigurationException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static void SaveFiles() // <-- 2015.08.09. + { + System.out.println("Saving files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("thebuttonmc.yml"); + YamlConfiguration yc = new YamlConfiguration(); + MaybeOfflinePlayer.Save(yc); + yc.set("notificationsound", PlayerListener.NotificationSound); + yc.set("notificationpitch", PlayerListener.NotificationPitch); + yc.set("announcetime", AnnounceTime); + yc.set("announcements", AnnounceMessages); + yc.set("quiz", Commands.Quiz) + yc.save(file); + System.out.println("The Button Minecraft plugin saved files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/6f/d0569c5ae240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/6f/d0569c5ae240001514c09dece48b36c7 new file mode 100644 index 0000000..5a0d8b8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/6f/d0569c5ae240001514c09dece48b36c7 @@ -0,0 +1,451 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + public static ConsoleSender Console; + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + //System.out.println("Start: "+start); + if(start==-1+"IGN:".length()) //+length: 2015.08.10. + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + //System.out.println("End: "+end); + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + //System.out.println("IGN: "+ign); + ign = ign.trim(); + //System.out.println("Trimmed IGN: "+ign); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + /*else + flair = "non-presser";*/ + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + //return p.Flair!=null; //2015.08.08. + return p.CommentedOnReddit; //2015.08.10. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + p.FlairRecognised=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(--s)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(??s)§r"; + break; + case "unknown": + if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair + p.FlairDecided=false; + else + p.FlairRecognised=false; + finalflair=""; + break; + default: + //finalflair=""; + //break; + return; + } + /*if(finalflair.length()==0) //<-- 2015.07.20. + return;*/ + p.Flair=finalflair; //2015.08.08. + p.CommentedOnReddit=true; //2015.08.10. + p.UserName=username; //2015.08.08. + if(finalflair.length()==0) //Just for the message + finalflair="undecided"; + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + //return flair==null ? "" : flair; + return flair; //2015.08.10. + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //<-- 2015.08.10. + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //2015.08.10. + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); + p.Flair=s[1]; //2015.08.09. + p.CommentedOnReddit=true; //Kind of + } + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + if(!tempFile.renameTo(inputFile)) + { + inputFile.delete(); + return tempFile.renameTo(inputFile); + } + else + return true; + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/75/00578f8b118b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/75/00578f8b118b00151149b99c05b1b975 new file mode 100644 index 0000000..610774c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/75/00578f8b118b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"§6If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§6If you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/78/b0ba5a02168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/78/b0ba5a02168b00151149b99c05b1b975 new file mode 100644 index 0000000..40e5e1d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/78/b0ba5a02168b00151149b99c05b1b975 @@ -0,0 +1,322 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + TimerTask tt = new TimerTask() { + public MaybeOfflinePlayer mp; + + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/79/40cb73222287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/79/40cb73222287001519af89c6c0264943 new file mode 100644 index 0000000..6cbbd2d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/79/40cb73222287001519af89c6c0264943 @@ -0,0 +1,575 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7a/d040fb952187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/7a/d040fb952187001519af89c6c0264943 new file mode 100644 index 0000000..75f77aa --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7a/d040fb952187001519af89c6c0264943 @@ -0,0 +1,584 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7c/d028e4369b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/7c/d028e4369b8c0015169bb4f96b251538 new file mode 100644 index 0000000..9c86abb --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7c/d028e4369b8c0015169bb4f96b251538 @@ -0,0 +1,335 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + private Timer Ftimer; + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Ftimer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (ActiveF) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + }; + Ftimer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7e/407c9a362287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/7e/407c9a362287001519af89c6c0264943 new file mode 100644 index 0000000..0ae0b9b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7e/407c9a362287001519af89c6c0264943 @@ -0,0 +1,575 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8/303bccc40e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/8/303bccc40e8b00151149b99c05b1b975 new file mode 100644 index 0000000..342781a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8/303bccc40e8b00151149b99c05b1b975 @@ -0,0 +1,317 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw "+mp.PlayerName+" "+json); + json = "[\"\",{\"text\":\"§6If you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw "+mp.PlayerName+" "+json); + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/80/506d6dc22187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/80/506d6dc22187001519af89c6c0264943 new file mode 100644 index 0000000..b17eebe --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/80/506d6dc22187001519af89c6c0264943 @@ -0,0 +1,587 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz=new ArrayList<>(); + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/85/401c3763e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/85/401c3763e640001514c09dece48b36c7 new file mode 100644 index 0000000..ee7ab82 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/85/401c3763e640001514c09dece48b36c7 @@ -0,0 +1,73 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0, arg3) + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8d/e0f3df742287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/8d/e0f3df742287001519af89c6c0264943 new file mode 100644 index 0000000..ffe0c3c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8d/e0f3df742287001519af89c6c0264943 @@ -0,0 +1,574 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8e/d06563122287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/8e/d06563122287001519af89c6c0264943 new file mode 100644 index 0000000..fb4fbfe --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8e/d06563122287001519af89c6c0264943 @@ -0,0 +1,579 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String message : Quiz) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/8f/f041e4b79a8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/8f/f041e4b79a8c0015169bb4f96b251538 new file mode 100644 index 0000000..4bc1f47 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/8f/f041e4b79a8c0015169bb4f96b251538 @@ -0,0 +1,319 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/90/c0d422e92287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/90/c0d422e92287001519af89c6c0264943 new file mode 100644 index 0000000..522f7ee --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/90/c0d422e92287001519af89c6c0264943 @@ -0,0 +1,304 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.IOUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.lang.String; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. + // A user, which flair isn't obtainable: + // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + public static PluginMain Instance; + public static ConsoleCommandSender Console; // 2015.08.12. + + // Fired when plugin is first enabled + @Override + public void onEnable() { + System.out.println("The Button Minecraft server plugin"); + getServer().getPluginManager().registerEvents(new PlayerListener(), + this); + Commands comm = new Commands(); + this.getCommand("u").setExecutor(comm); + this.getCommand("u").setUsage( + this.getCommand("u").getUsage().replace('&', '§')); + this.getCommand("nrp").setExecutor(comm); + this.getCommand("nrp").setUsage( + this.getCommand("nrp").getUsage().replace('&', '§')); + this.getCommand("ooc").setExecutor(comm); + this.getCommand("ooc").setUsage( + this.getCommand("ooc").getUsage().replace('&', '§')); + this.getCommand("skype").setExecutor(comm); + Instance = this; // 2015.08.08. + Console = this.getServer().getConsoleSender(); // 2015.08.12. + LoadFiles(false); // 2015.08.09. + Runnable r = new Runnable() { + public void run() { + ThreadMethod(); + } + }; + Thread t = new Thread(r); + t.start(); + r = new Runnable() { + public void run() { + AnnouncerThread.Run(); + } + }; + t = new Thread(r); + t.start(); + } + + public Boolean stop = false; + + // Fired when plugin is disabled + @Override + public void onDisable() { + SaveFiles(); // 2015.08.09. + stop = true; + } + + public void ThreadMethod() // <-- 2015.07.16. + { + while (!stop) { + try { + String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json = new JSONArray(body).getJSONObject(1) + .getJSONObject("data").getJSONArray("children"); + for (Object obj : json) { + JSONObject item = (JSONObject) obj; + String author = item.getJSONObject("data").getString( + "author"); + String ign = item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if (start == -1 + "IGN:".length()) // +length: 2015.08.10. + continue; // 2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end = ign.indexOf('\n', start); // 2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); + if (mp == null) + continue; + if (HasIGFlair(mp.UUID)) + continue; + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString( + "http://karmadecay.com/thebutton-data.php?users=" + + author).replace("\"", "").split(":"); + String flair; + if (flairdata.length > 1) // 2015.07.15. + flair = flairdata[1]; + else + flair = ""; + if (flair != "-1") + flair = flair + "s"; + String flairclass; + if (flairdata.length > 2) + flairclass = flairdata[2]; + else + flairclass = "unknown"; + SetFlair(mp.UUID, flair, flairclass, author); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } catch (Exception e) { + // System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + } + + public static Exception LastException; // 2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, + IOException { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors = new HashMap(); // 2015.07.20. + + public Boolean HasIGFlair(UUID uuid) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + return p.CommentedOnReddit; // 2015.08.10. + } + + public void SetFlair(UUID uuid, String text, String flairclass, + String username) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + String finalflair; + p.FlairDecided = true; + p.FlairRecognised = true; + switch (flairclass) { + case "press-1": + finalflair = "§c(" + text + ")§r"; + break; + case "press-2": + finalflair = "§6(" + text + ")§r"; + break; + case "press-3": + finalflair = "§e(" + text + ")§r"; + break; + case "press-4": + finalflair = "§a(" + text + ")§r"; + break; + case "press-5": + finalflair = "§9(" + text + ")§r"; + break; + case "press-6": + finalflair = "§5(" + text + ")§r"; + break; + case "no-press": + finalflair = "§7(--s)§r"; + break; + case "cheater": + finalflair = "§5(" + text + ")§r"; + break; + case "cant-press": // 2015.08.08. + finalflair = "§r(??s)§r"; + break; + case "unknown": + if (text.equals("-1")) // If true, only non-presser/can't press; if + // false, any flair + p.FlairDecided = false; + else + p.FlairRecognised = false; + finalflair = ""; + break; + default: + return; + } + p.Flair = finalflair; // 2015.08.08. + p.CommentedOnReddit = true; // 2015.08.10. + p.UserName = username; // 2015.08.08. + System.out.println("Added flair for " + p.PlayerName); + AppendPlayerDisplayFlair(p, Bukkit.getPlayer(uuid)); + } + + public static String GetFlair(Player player) { // 2015.07.16. + String flair = MaybeOfflinePlayer.AllPlayers.get(player.getUniqueId()).Flair; // 2015.08.08. + return flair; // 2015.08.10. + } + + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, + Player p) // <-- 2015.08.09. + { + + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).IgnoredFlair) + return; + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).AcceptedFlair) { + if (!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. + } else + p.sendMessage("§9Are you Reddit user " + player.UserName + + "?§r §6Type /u accept or /u ignore§r"); + } + + public static String GetColorForTown(String townname) { // 2015.07.20. + if (TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static Collection GetPlayers() { + return Instance.getServer().getOnlinePlayers(); + } + + public static ArrayList AnnounceMessages = new ArrayList<>(); + public static int AnnounceTime = 15 * 60 * 1000; + + public static void LoadFiles(boolean reload) // <-- 2015.08.09. + { + if (reload) { // 2015.08.09. + System.out + .println("The Button Minecraft plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + AnnounceMessages.clear(); + Commands.Quiz.clear(); + } + System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("announcemessages.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsaccepted.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsignored.txt"); + if (file.exists()) + file.delete(); + file = new File("thebuttonmc.yml"); + if (file.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + yc.load(file); + MaybeOfflinePlayer.Load(yc); + PlayerListener.NotificationSound = yc + .getString("notificationsound"); + PlayerListener.NotificationPitch = yc + .getDouble("notificationpitch"); + AnnounceTime = yc.getInt("announcetime"); + AnnounceMessages.addAll(yc.getStringList("announcements")); + } + System.out.println("The Button Minecraft plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } catch (InvalidConfigurationException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static void SaveFiles() // <-- 2015.08.09. + { + System.out.println("Saving files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("thebuttonmc.yml"); + YamlConfiguration yc = new YamlConfiguration(); + MaybeOfflinePlayer.Save(yc); + yc.set("notificationsound", PlayerListener.NotificationSound); + yc.set("notificationpitch", PlayerListener.NotificationPitch); + yc.set("announcetime", AnnounceTime); + yc.set("announcements", AnnounceMessages); + yc.save(file); + System.out.println("The Button Minecraft plugin saved files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/93/5044523e0e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/93/5044523e0e8b00151149b99c05b1b975 new file mode 100644 index 0000000..0c65462 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/93/5044523e0e8b00151149b99c05b1b975 @@ -0,0 +1,320 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + p.sendMessage(message); + message = "§bhttps://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/§r"; + p.sendMessage(message); + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + p.sendMessage(message); + message = "§bIf you already commented your name, then please wait a few seconds.§r"; + p.sendMessage(message); + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/96/206d0ff9158b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/96/206d0ff9158b00151149b99c05b1b975 new file mode 100644 index 0000000..bad7ae2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/96/206d0ff9158b00151149b99c05b1b975 @@ -0,0 +1,321 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + public MaybeOfflinePlayer mp; + + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/97/c037f44de440001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/97/c037f44de440001514c09dece48b36c7 new file mode 100644 index 0000000..5c4b806 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/97/c037f44de440001514c09dece48b36c7 @@ -0,0 +1,296 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player)s + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/97/d0c07d01198b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/97/d0c07d01198b00151149b99c05b1b975 new file mode 100644 index 0000000..8859bb0 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/97/d0c07d01198b00151149b99c05b1b975 @@ -0,0 +1,320 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + //if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/97/f0a3a5f1de40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/97/f0a3a5f1de40001514c09dece48b36c7 new file mode 100644 index 0000000..a5817c9 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/97/f0a3a5f1de40001514c09dece48b36c7 @@ -0,0 +1,297 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + System.out.println(message); + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/98/4037ffce9b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/98/4037ffce9b8c0015169bb4f96b251538 new file mode 100644 index 0000000..eed069e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/98/4037ffce9b8c0015169bb4f96b251538 @@ -0,0 +1,328 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event + .getPlayer().getUniqueId()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e + .getPlayer().getUniqueId()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + private Timer Ftimer; + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + if (Ftimer != null) + Ftimer.cancel(); + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Ftimer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (ActiveF) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + }; + Ftimer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/98/502802722287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/98/502802722287001519af89c6c0264943 new file mode 100644 index 0000000..80d0bdc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/98/502802722287001519af89c6c0264943 @@ -0,0 +1,303 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.IOUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.lang.String; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. + // A user, which flair isn't obtainable: + // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + public static PluginMain Instance; + public static ConsoleCommandSender Console; // 2015.08.12. + + // Fired when plugin is first enabled + @Override + public void onEnable() { + System.out.println("The Button Minecraft server plugin"); + getServer().getPluginManager().registerEvents(new PlayerListener(), + this); + Commands comm = new Commands(); + this.getCommand("u").setExecutor(comm); + this.getCommand("u").setUsage( + this.getCommand("u").getUsage().replace('&', '§')); + this.getCommand("nrp").setExecutor(comm); + this.getCommand("nrp").setUsage( + this.getCommand("nrp").getUsage().replace('&', '§')); + this.getCommand("ooc").setExecutor(comm); + this.getCommand("ooc").setUsage( + this.getCommand("ooc").getUsage().replace('&', '§')); + this.getCommand("skype").setExecutor(comm); + Instance = this; // 2015.08.08. + Console = this.getServer().getConsoleSender(); // 2015.08.12. + LoadFiles(false); // 2015.08.09. + Runnable r = new Runnable() { + public void run() { + ThreadMethod(); + } + }; + Thread t = new Thread(r); + t.start(); + r = new Runnable() { + public void run() { + AnnouncerThread.Run(); + } + }; + t = new Thread(r); + t.start(); + } + + public Boolean stop = false; + + // Fired when plugin is disabled + @Override + public void onDisable() { + SaveFiles(); // 2015.08.09. + stop = true; + } + + public void ThreadMethod() // <-- 2015.07.16. + { + while (!stop) { + try { + String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json = new JSONArray(body).getJSONObject(1) + .getJSONObject("data").getJSONArray("children"); + for (Object obj : json) { + JSONObject item = (JSONObject) obj; + String author = item.getJSONObject("data").getString( + "author"); + String ign = item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if (start == -1 + "IGN:".length()) // +length: 2015.08.10. + continue; // 2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end = ign.indexOf('\n', start); // 2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); + if (mp == null) + continue; + if (HasIGFlair(mp.UUID)) + continue; + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString( + "http://karmadecay.com/thebutton-data.php?users=" + + author).replace("\"", "").split(":"); + String flair; + if (flairdata.length > 1) // 2015.07.15. + flair = flairdata[1]; + else + flair = ""; + if (flair != "-1") + flair = flair + "s"; + String flairclass; + if (flairdata.length > 2) + flairclass = flairdata[2]; + else + flairclass = "unknown"; + SetFlair(mp.UUID, flair, flairclass, author); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } catch (Exception e) { + // System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + } + + public static Exception LastException; // 2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, + IOException { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors = new HashMap(); // 2015.07.20. + + public Boolean HasIGFlair(UUID uuid) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + return p.CommentedOnReddit; // 2015.08.10. + } + + public void SetFlair(UUID uuid, String text, String flairclass, + String username) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + String finalflair; + p.FlairDecided = true; + p.FlairRecognised = true; + switch (flairclass) { + case "press-1": + finalflair = "§c(" + text + ")§r"; + break; + case "press-2": + finalflair = "§6(" + text + ")§r"; + break; + case "press-3": + finalflair = "§e(" + text + ")§r"; + break; + case "press-4": + finalflair = "§a(" + text + ")§r"; + break; + case "press-5": + finalflair = "§9(" + text + ")§r"; + break; + case "press-6": + finalflair = "§5(" + text + ")§r"; + break; + case "no-press": + finalflair = "§7(--s)§r"; + break; + case "cheater": + finalflair = "§5(" + text + ")§r"; + break; + case "cant-press": // 2015.08.08. + finalflair = "§r(??s)§r"; + break; + case "unknown": + if (text.equals("-1")) // If true, only non-presser/can't press; if + // false, any flair + p.FlairDecided = false; + else + p.FlairRecognised = false; + finalflair = ""; + break; + default: + return; + } + p.Flair = finalflair; // 2015.08.08. + p.CommentedOnReddit = true; // 2015.08.10. + p.UserName = username; // 2015.08.08. + System.out.println("Added flair for " + p.PlayerName); + AppendPlayerDisplayFlair(p, Bukkit.getPlayer(uuid)); + } + + public static String GetFlair(Player player) { // 2015.07.16. + String flair = MaybeOfflinePlayer.AllPlayers.get(player.getUniqueId()).Flair; // 2015.08.08. + return flair; // 2015.08.10. + } + + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, + Player p) // <-- 2015.08.09. + { + + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).IgnoredFlair) + return; + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).AcceptedFlair) { + if (!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. + } else + p.sendMessage("§9Are you Reddit user " + player.UserName + + "?§r §6Type /u accept or /u ignore§r"); + } + + public static String GetColorForTown(String townname) { // 2015.07.20. + if (TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static Collection GetPlayers() { + return Instance.getServer().getOnlinePlayers(); + } + + public static ArrayList AnnounceMessages = new ArrayList<>(); + public static int AnnounceTime = 15 * 60 * 1000; + + public static void LoadFiles(boolean reload) // <-- 2015.08.09. + { + if (reload) { // 2015.08.09. + System.out + .println("The Button Minecraft plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + AnnounceMessages.clear(); + } + System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("announcemessages.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsaccepted.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsignored.txt"); + if (file.exists()) + file.delete(); + file = new File("thebuttonmc.yml"); + if (file.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + yc.load(file); + MaybeOfflinePlayer.Load(yc); + PlayerListener.NotificationSound = yc + .getString("notificationsound"); + PlayerListener.NotificationPitch = yc + .getDouble("notificationpitch"); + AnnounceTime = yc.getInt("announcetime"); + AnnounceMessages.addAll(yc.getStringList("announcements")); + } + System.out.println("The Button Minecraft plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } catch (InvalidConfigurationException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static void SaveFiles() // <-- 2015.08.09. + { + System.out.println("Saving files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("thebuttonmc.yml"); + YamlConfiguration yc = new YamlConfiguration(); + MaybeOfflinePlayer.Save(yc); + yc.set("notificationsound", PlayerListener.NotificationSound); + yc.set("notificationpitch", PlayerListener.NotificationPitch); + yc.set("announcetime", AnnounceTime); + yc.set("announcements", AnnounceMessages); + yc.save(file); + System.out.println("The Button Minecraft plugin saved files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9a/e08e32dd2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/9a/e08e32dd2d53001516cdaaef55e27ba4 new file mode 100644 index 0000000..9626fec --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/9a/e08e32dd2d53001516cdaaef55e27ba4 @@ -0,0 +1,15 @@ +name: TheButtonMCPlugin +main: tk.sznp.thebuttonautoflair.PluginMain +version: 2.0 +commands: + u: + description: Auto-flair system. Accept or ignore flair. + usage: "&cUsage: /u accept|ignore|opme&r" + nrp: + description: Send message in Out-of-Character + usage: "&cUsage: /nrp &r" + ooc: + description: Send message in Out-of-Character + usage: "&cUsage: /ooc &r" +author: NorbiPeti +depend: [Essentials, Towny] diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9b/50bd8c072287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/9b/50bd8c072287001519af89c6c0264943 new file mode 100644 index 0000000..6988ef3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/9b/50bd8c072287001519af89c6c0264943 @@ -0,0 +1,579 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9e/206f5678168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/9e/206f5678168b00151149b99c05b1b975 new file mode 100644 index 0000000..da21c4a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/9e/206f5678168b00151149b99c05b1b975 @@ -0,0 +1,5 @@ +package tk.sznp.thebuttonautoflair; + +public class PlayerJoinTimerTask extends TimerTask { + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/9f/40b3b3122387001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/9f/40b3b3122387001519af89c6c0264943 new file mode 100644 index 0000000..5eaa277 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/9f/40b3b3122387001519af89c6c0264943 @@ -0,0 +1,306 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.IOUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.lang.String; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. + // A user, which flair isn't obtainable: + // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + public static PluginMain Instance; + public static ConsoleCommandSender Console; // 2015.08.12. + + // Fired when plugin is first enabled + @Override + public void onEnable() { + System.out.println("The Button Minecraft server plugin"); + getServer().getPluginManager().registerEvents(new PlayerListener(), + this); + Commands comm = new Commands(); + this.getCommand("u").setExecutor(comm); + this.getCommand("u").setUsage( + this.getCommand("u").getUsage().replace('&', '§')); + this.getCommand("nrp").setExecutor(comm); + this.getCommand("nrp").setUsage( + this.getCommand("nrp").getUsage().replace('&', '§')); + this.getCommand("ooc").setExecutor(comm); + this.getCommand("ooc").setUsage( + this.getCommand("ooc").getUsage().replace('&', '§')); + this.getCommand("skype").setExecutor(comm); + Instance = this; // 2015.08.08. + Console = this.getServer().getConsoleSender(); // 2015.08.12. + LoadFiles(false); // 2015.08.09. + Runnable r = new Runnable() { + public void run() { + ThreadMethod(); + } + }; + Thread t = new Thread(r); + t.start(); + r = new Runnable() { + public void run() { + AnnouncerThread.Run(); + } + }; + t = new Thread(r); + t.start(); + } + + public Boolean stop = false; + + // Fired when plugin is disabled + @Override + public void onDisable() { + SaveFiles(); // 2015.08.09. + stop = true; + } + + public void ThreadMethod() // <-- 2015.07.16. + { + while (!stop) { + try { + String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json = new JSONArray(body).getJSONObject(1) + .getJSONObject("data").getJSONArray("children"); + for (Object obj : json) { + JSONObject item = (JSONObject) obj; + String author = item.getJSONObject("data").getString( + "author"); + String ign = item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if (start == -1 + "IGN:".length()) // +length: 2015.08.10. + continue; // 2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end = ign.indexOf('\n', start); // 2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); + if (mp == null) + continue; + if (HasIGFlair(mp.UUID)) + continue; + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString( + "http://karmadecay.com/thebutton-data.php?users=" + + author).replace("\"", "").split(":"); + String flair; + if (flairdata.length > 1) // 2015.07.15. + flair = flairdata[1]; + else + flair = ""; + if (flair != "-1") + flair = flair + "s"; + String flairclass; + if (flairdata.length > 2) + flairclass = flairdata[2]; + else + flairclass = "unknown"; + SetFlair(mp.UUID, flair, flairclass, author); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } catch (Exception e) { + // System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + } + + public static Exception LastException; // 2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, + IOException { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors = new HashMap(); // 2015.07.20. + + public Boolean HasIGFlair(UUID uuid) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + return p.CommentedOnReddit; // 2015.08.10. + } + + public void SetFlair(UUID uuid, String text, String flairclass, + String username) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + String finalflair; + p.FlairDecided = true; + p.FlairRecognised = true; + switch (flairclass) { + case "press-1": + finalflair = "§c(" + text + ")§r"; + break; + case "press-2": + finalflair = "§6(" + text + ")§r"; + break; + case "press-3": + finalflair = "§e(" + text + ")§r"; + break; + case "press-4": + finalflair = "§a(" + text + ")§r"; + break; + case "press-5": + finalflair = "§9(" + text + ")§r"; + break; + case "press-6": + finalflair = "§5(" + text + ")§r"; + break; + case "no-press": + finalflair = "§7(--s)§r"; + break; + case "cheater": + finalflair = "§5(" + text + ")§r"; + break; + case "cant-press": // 2015.08.08. + finalflair = "§r(??s)§r"; + break; + case "unknown": + if (text.equals("-1")) // If true, only non-presser/can't press; if + // false, any flair + p.FlairDecided = false; + else + p.FlairRecognised = false; + finalflair = ""; + break; + default: + return; + } + p.Flair = finalflair; // 2015.08.08. + p.CommentedOnReddit = true; // 2015.08.10. + p.UserName = username; // 2015.08.08. + System.out.println("Added flair for " + p.PlayerName); + AppendPlayerDisplayFlair(p, Bukkit.getPlayer(uuid)); + } + + public static String GetFlair(Player player) { // 2015.07.16. + String flair = MaybeOfflinePlayer.AllPlayers.get(player.getUniqueId()).Flair; // 2015.08.08. + return flair; // 2015.08.10. + } + + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, + Player p) // <-- 2015.08.09. + { + + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).IgnoredFlair) + return; + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).AcceptedFlair) { + if (!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. + } else + p.sendMessage("§9Are you Reddit user " + player.UserName + + "?§r §6Type /u accept or /u ignore§r"); + } + + public static String GetColorForTown(String townname) { // 2015.07.20. + if (TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static Collection GetPlayers() { + return Instance.getServer().getOnlinePlayers(); + } + + public static ArrayList AnnounceMessages = new ArrayList<>(); + public static int AnnounceTime = 15 * 60 * 1000; + + public static void LoadFiles(boolean reload) // <-- 2015.08.09. + { + if (reload) { // 2015.08.09. + System.out + .println("The Button Minecraft plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + AnnounceMessages.clear(); + Commands.Quiz.clear(); + } + System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("announcemessages.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsaccepted.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsignored.txt"); + if (file.exists()) + file.delete(); + file = new File("thebuttonmc.yml"); + if (file.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + yc.load(file); + MaybeOfflinePlayer.Load(yc); + PlayerListener.NotificationSound = yc + .getString("notificationsound"); + PlayerListener.NotificationPitch = yc + .getDouble("notificationpitch"); + AnnounceTime = yc.getInt("announcetime"); + AnnounceMessages.addAll(yc.getStringList("announcements")); + Commands.Quiz.addAll(yc.getStringList("quiz")); + } + System.out.println("The Button Minecraft plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } catch (InvalidConfigurationException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static void SaveFiles() // <-- 2015.08.09. + { + System.out.println("Saving files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("thebuttonmc.yml"); + YamlConfiguration yc = new YamlConfiguration(); + MaybeOfflinePlayer.Save(yc); + yc.set("notificationsound", PlayerListener.NotificationSound); + yc.set("notificationpitch", PlayerListener.NotificationPitch); + yc.set("announcetime", AnnounceTime); + yc.set("announcements", AnnounceMessages); + yc.set("quiz", Commands.Quiz);F + yc.save(file); + System.out.println("The Button Minecraft plugin saved files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/40b13fdfb94400151637bde96975c236 b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/40b13fdfb94400151637bde96975c236 new file mode 100644 index 0000000..b71fce5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/40b13fdfb94400151637bde96975c236 @@ -0,0 +1,7 @@ +name: TheButtonMCPlugin +main: tk.sznp.thebuttonautoflair.PluginMain +version: 2.0 +commands: + u: + description: Auto-flair system and others, like name mentioning + usage: "&cUsage: /u accept|ignore|opme&r" diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a4/30f2b3fa118b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/a4/30f2b3fa118b00151149b99c05b1b975 new file mode 100644 index 0000000..610774c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a4/30f2b3fa118b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"§6If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§6If you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a5/102ab363e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/a5/102ab363e640001514c09dece48b36c7 new file mode 100644 index 0000000..06ce0fb --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a5/102ab363e640001514c09dece48b36c7 @@ -0,0 +1,73 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0, 1.0) + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a6/306d822d138b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/a6/306d822d138b00151149b99c05b1b975 new file mode 100644 index 0000000..51eb7f9 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a6/306d822d138b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your flair displayed ingame, write your Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§bIf you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a8/4016faaee240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/a8/4016faaee240001514c09dece48b36c7 new file mode 100644 index 0000000..f1e321a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a8/4016faaee240001514c09dece48b36c7 @@ -0,0 +1,299 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a9/a0007674168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/a0007674168b00151149b99c05b1b975 new file mode 100644 index 0000000..724679a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/a0007674168b00151149b99c05b1b975 @@ -0,0 +1,5 @@ +package tk.sznp.thebuttonautoflair; + +public class PlayerJoinTimerTask extends { + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a9/c09d79ad2087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/c09d79ad2087001519af89c6c0264943 new file mode 100644 index 0000000..cd9aa82 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a9/c09d79ad2087001519af89c6c0264943 @@ -0,0 +1,495 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index=Integer.parseInt(args[2]); + if() + while(PluginMain.AnnounceMessages.size()<=) + + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ab/c07bf623e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/c07bf623e640001514c09dece48b36c7 new file mode 100644 index 0000000..7c5cf6b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ab/c07bf623e640001514c09dece48b36c7 @@ -0,0 +1,72 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(p.getLocation(), arg1, arg2, arg3) + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ac/50a4ecaae240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ac/50a4ecaae240001514c09dece48b36c7 new file mode 100644 index 0000000..e8643bd --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ac/50a4ecaae240001514c09dece48b36c7 @@ -0,0 +1,298 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/b067a2dd2d53001516cdaaef55e27ba4 b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/b067a2dd2d53001516cdaaef55e27ba4 new file mode 100644 index 0000000..9626fec --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/b067a2dd2d53001516cdaaef55e27ba4 @@ -0,0 +1,15 @@ +name: TheButtonMCPlugin +main: tk.sznp.thebuttonautoflair.PluginMain +version: 2.0 +commands: + u: + description: Auto-flair system. Accept or ignore flair. + usage: "&cUsage: /u accept|ignore|opme&r" + nrp: + description: Send message in Out-of-Character + usage: "&cUsage: /nrp &r" + ooc: + description: Send message in Out-of-Character + usage: "&cUsage: /ooc &r" +author: NorbiPeti +depend: [Essentials, Towny] diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/d005e8c02187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/d005e8c02187001519af89c6c0264943 new file mode 100644 index 0000000..b17eebe --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/d005e8c02187001519af89c6c0264943 @@ -0,0 +1,587 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz=new ArrayList<>(); + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ad/e01e43fdde40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/e01e43fdde40001514c09dece48b36c7 new file mode 100644 index 0000000..9bf1e2e --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ad/e01e43fdde40001514c09dece48b36c7 @@ -0,0 +1,297 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + System.out.println(message); + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ae/d01c7740e340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ae/d01c7740e340001514c09dece48b36c7 new file mode 100644 index 0000000..233a816 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ae/d01c7740e340001514c09dece48b36c7 @@ -0,0 +1,295 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin..."); + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/af/60ef08a60c8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/af/60ef08a60c8b00151149b99c05b1b975 new file mode 100644 index 0000000..7bdfaaf --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/af/60ef08a60c8b00151149b99c05b1b975 @@ -0,0 +1,320 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + p.sendMessage(message); + message = "§bhttps://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/§r"; + p.sendMessage(message); + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + p.sendMessage(message); + message = "§bIf you already commented your name, then please wait a few seconds.§r"; + p.sendMessage(message); + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b/707985099b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/b/707985099b8c0015169bb4f96b251538 new file mode 100644 index 0000000..fa81ad7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b/707985099b8c0015169bb4f96b251538 @@ -0,0 +1,334 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Timer timer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (ActiveF) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + }; + timer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b2/d06fefa82287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/b2/d06fefa82287001519af89c6c0264943 new file mode 100644 index 0000000..986f05b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b2/d06fefa82287001519af89c6c0264943 @@ -0,0 +1,584 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "quiz": + DoQuiz(player, args, null); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + public static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/30deaf0b148b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/30deaf0b148b00151149b99c05b1b975 new file mode 100644 index 0000000..22720e2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/30deaf0b148b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/50a8a0439b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/50a8a0439b8c0015169bb4f96b251538 new file mode 100644 index 0000000..1eef614 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/50a8a0439b8c0015169bb4f96b251538 @@ -0,0 +1,338 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + private Timer Ftimer; + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + if (Ftimer != null) + Ftimer.cancel(); + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Ftimer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (ActiveF) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + }; + Ftimer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b3/f0d62592e540001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/f0d62592e540001514c09dece48b36c7 new file mode 100644 index 0000000..1ac0551 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b3/f0d62592e540001514c09dece48b36c7 @@ -0,0 +1,72 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.sendMessage() + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b5/e01fc9c92187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/b5/e01fc9c92187001519af89c6c0264943 new file mode 100644 index 0000000..b4dc6e7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b5/e01fc9c92187001519af89c6c0264943 @@ -0,0 +1,588 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b6/30123c0f148b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/30123c0f148b00151149b99c05b1b975 new file mode 100644 index 0000000..6a31a0b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b6/30123c0f148b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b7/a0b1e23b138b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/b7/a0b1e23b138b00151149b99c05b1b975 new file mode 100644 index 0000000..c9bd460 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b7/a0b1e23b138b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your flair displayed ingame, write your Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§bIf you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b9/5008fb862087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/b9/5008fb862087001519af89c6c0264943 new file mode 100644 index 0000000..f9a764a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b9/5008fb862087001519af89c6c0264943 @@ -0,0 +1,491 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/b9/c0ad8e3ee340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/b9/c0ad8e3ee340001514c09dece48b36c7 new file mode 100644 index 0000000..04a669a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/b9/c0ad8e3ee340001514c09dece48b36c7 @@ -0,0 +1,294 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bb/506865c02187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/506865c02187001519af89c6c0264943 new file mode 100644 index 0000000..1114eab --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/506865c02187001519af89c6c0264943 @@ -0,0 +1,586 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + p + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/bb/708754aee240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/708754aee240001514c09dece48b36c7 new file mode 100644 index 0000000..4f33dd3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/bb/708754aee240001514c09dece48b36c7 @@ -0,0 +1,298 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/be/f0ff0a082087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/be/f0ff0a082087001519af89c6c0264943 new file mode 100644 index 0000000..8161769 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/be/f0ff0a082087001519af89c6c0264943 @@ -0,0 +1,491 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "&cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c3/207c49a0168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/c3/207c49a0168b00151149b99c05b1b975 new file mode 100644 index 0000000..2258b2a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c3/207c49a0168b00151149b99c05b1b975 @@ -0,0 +1,12 @@ +package tk.sznp.thebuttonautoflair; + +import java.util.TimerTask; + +public abstract class PlayerJoinTimerTask extends TimerTask { + + @Override + public abstract void run(); + + public abstract MaybeOfflinePlayer mp; + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c3/40771d08e740001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/c3/40771d08e740001514c09dece48b36c7 new file mode 100644 index 0000000..152043a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c3/40771d08e740001514c09dece48b36c7 @@ -0,0 +1,74 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + if(message.contains(p.getName())) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f); //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c4/b03fc23d168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/b03fc23d168b00151149b99c05b1b975 new file mode 100644 index 0000000..91fbd1b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/b03fc23d168b00151149b99c05b1b975 @@ -0,0 +1,323 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + TimerTask tt = new TimerTask() { + public MaybeOfflinePlayer mp; + + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp=mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c4/c09467ba168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/c09467ba168b00151149b99c05b1b975 new file mode 100644 index 0000000..c3f2412 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c4/c09467ba168b00151149b99c05b1b975 @@ -0,0 +1,321 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c5/40ffd3b49b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/c5/40ffd3b49b8c0015169bb4f96b251538 new file mode 100644 index 0000000..d85614f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c5/40ffd3b49b8c0015169bb4f96b251538 @@ -0,0 +1,583 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "quiz": + DoQuiz(player, args, null); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } else if (args.length > 0 && args[0].toLowerCase().equals("quiz")) { + if (sender instanceof BlockCommandSender) + DoQuiz(null, args, (BlockCommandSender) sender); + else + DoQuiz(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + public static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c8/2017ffab0f8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/c8/2017ffab0f8b00151149b99c05b1b975 new file mode 100644 index 0000000..a261030 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c8/2017ffab0f8b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§6If you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c8/a0c64fa50e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/c8/a0c64fa50e8b00151149b99c05b1b975 new file mode 100644 index 0000000..0e17eed --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c8/a0c64fa50e8b00151149b99c05b1b975 @@ -0,0 +1,317 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw "+mp.PlayerName+" "+json); + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c9/30f44f45158b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/c9/30f44f45158b00151149b99c05b1b975 new file mode 100644 index 0000000..70b0718 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c9/30f44f45158b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c9/d021561d2287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/c9/d021561d2287001519af89c6c0264943 new file mode 100644 index 0000000..7963bca --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c9/d021561d2287001519af89c6c0264943 @@ -0,0 +1,575 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ca/30f9fabe0e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/ca/30f9fabe0e8b00151149b99c05b1b975 new file mode 100644 index 0000000..7d66255 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ca/30f9fabe0e8b00151149b99c05b1b975 @@ -0,0 +1,317 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw "+mp.PlayerName+" "+json); + json = "[\"\",{\"text\":\"§6If you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cd/30833796168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/cd/30833796168b00151149b99c05b1b975 new file mode 100644 index 0000000..4b40ac4 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/cd/30833796168b00151149b99c05b1b975 @@ -0,0 +1,10 @@ +package tk.sznp.thebuttonautoflair; + +import java.util.TimerTask; + +public abstract class PlayerJoinTimerTask extends TimerTask { + + @Override + public abstract void run(); + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/cd/502cf23c2287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/cd/502cf23c2287001519af89c6c0264943 new file mode 100644 index 0000000..6aab877 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/cd/502cf23c2287001519af89c6c0264943 @@ -0,0 +1,575 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d/40ebea47e340001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d/40ebea47e340001514c09dece48b36c7 new file mode 100644 index 0000000..c4760e2 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d/40ebea47e340001514c09dece48b36c7 @@ -0,0 +1,296 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/405b2dafe240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/405b2dafe240001514c09dece48b36c7 new file mode 100644 index 0000000..4f33dd3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/405b2dafe240001514c09dece48b36c7 @@ -0,0 +1,298 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/d0f74b8de640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/d0f74b8de640001514c09dece48b36c7 new file mode 100644 index 0000000..cbc9ea1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/d0f74b8de640001514c09dece48b36c7 @@ -0,0 +1,73 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 1.0f); //2015.08.12. + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d0/f0f48766e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/f0f48766e640001514c09dece48b36c7 new file mode 100644 index 0000000..89930f8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d0/f0f48766e640001514c09dece48b36c7 @@ -0,0 +1,73 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0, 1.0); + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d1/50736f002287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/d1/50736f002287001519af89c6c0264943 new file mode 100644 index 0000000..ab29328 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d1/50736f002287001519af89c6c0264943 @@ -0,0 +1,579 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d2/50685e70e240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d2/50685e70e240001514c09dece48b36c7 new file mode 100644 index 0000000..a8534f3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d2/50685e70e240001514c09dece48b36c7 @@ -0,0 +1,453 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + public static ConsoleCommandSender Console; //2015.08.12. + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + Console=this.getServer().getConsoleSender(); + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + //System.out.println("Start: "+start); + if(start==-1+"IGN:".length()) //+length: 2015.08.10. + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + //System.out.println("End: "+end); + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + //System.out.println("IGN: "+ign); + ign = ign.trim(); + //System.out.println("Trimmed IGN: "+ign); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + /*else + flair = "non-presser";*/ + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + //return p.Flair!=null; //2015.08.08. + return p.CommentedOnReddit; //2015.08.10. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + p.FlairRecognised=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(--s)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(??s)§r"; + break; + case "unknown": + if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair + p.FlairDecided=false; + else + p.FlairRecognised=false; + finalflair=""; + break; + default: + //finalflair=""; + //break; + return; + } + /*if(finalflair.length()==0) //<-- 2015.07.20. + return;*/ + p.Flair=finalflair; //2015.08.08. + p.CommentedOnReddit=true; //2015.08.10. + p.UserName=username; //2015.08.08. + if(finalflair.length()==0) //Just for the message + finalflair="undecided"; + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + //return flair==null ? "" : flair; + return flair; //2015.08.10. + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //<-- 2015.08.10. + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //2015.08.10. + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); + p.Flair=s[1]; //2015.08.09. + p.CommentedOnReddit=true; //Kind of + } + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + if(!tempFile.renameTo(inputFile)) + { + inputFile.delete(); + return tempFile.renameTo(inputFile); + } + else + return true; + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d4/b0879008128b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/d4/b0879008128b00151149b99c05b1b975 new file mode 100644 index 0000000..067bbcc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d4/b0879008128b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"§bIf you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§bIf you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d4/c05ee3692087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/d4/c05ee3692087001519af89c6c0264943 new file mode 100644 index 0000000..f9a764a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d4/c05ee3692087001519af89c6c0264943 @@ -0,0 +1,491 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d5/d08253be2287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/d5/d08253be2287001519af89c6c0264943 new file mode 100644 index 0000000..456bb47 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d5/d08253be2287001519af89c6c0264943 @@ -0,0 +1,583 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "quiz": + DoQuiz(player, args, null); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } else if (args.length > 0 && args[0].toLowerCase().equals("quiz")) { + if (sender instanceof BlockCommandSender) + DoQuiz(null, args, (BlockCommandSender) sender); + else + DoQuiz(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + public static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d5/d0e71dc1e140001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d5/d0e71dc1e140001514c09dece48b36c7 new file mode 100644 index 0000000..e68eaa6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d5/d0e71dc1e140001514c09dece48b36c7 @@ -0,0 +1,450 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + //System.out.println("Start: "+start); + if(start==-1+"IGN:".length()) //+length: 2015.08.10. + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + //System.out.println("End: "+end); + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + //System.out.println("IGN: "+ign); + ign = ign.trim(); + //System.out.println("Trimmed IGN: "+ign); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + /*else + flair = "non-presser";*/ + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + //return p.Flair!=null; //2015.08.08. + return p.CommentedOnReddit; //2015.08.10. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + p.FlairRecognised=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(--s)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(??s)§r"; + break; + case "unknown": + if(text.equals("-1")) //If true, only non-presser/can't press; if false, any flair + p.FlairDecided=false; + else + p.FlairRecognised=false; + finalflair=""; + break; + default: + //finalflair=""; + //break; + return; + } + /*if(finalflair.length()==0) //<-- 2015.07.20. + return;*/ + p.Flair=finalflair; //2015.08.08. + p.CommentedOnReddit=true; //2015.08.10. + p.UserName=username; //2015.08.08. + if(finalflair.length()==0) //Just for the message + finalflair="undecided"; + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + //return flair==null ? "" : flair; + return flair; //2015.08.10. + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + //AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + /*private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + *String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //<-- 2015.08.10. + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //2015.08.10. + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]); + p.Flair=s[1]; //2015.08.09. + p.CommentedOnReddit=true; //Kind of + } + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + if(!tempFile.renameTo(inputFile)) + { + inputFile.delete(); + return tempFile.renameTo(inputFile); + } + else + return true; + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d8/4044c9a7e240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/d8/4044c9a7e240001514c09dece48b36c7 new file mode 100644 index 0000000..975702f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d8/4044c9a7e240001514c09dece48b36c7 @@ -0,0 +1,297 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + System.out.println(message); + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/d9/40a17a9f2287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/d9/40a17a9f2287001519af89c6c0264943 new file mode 100644 index 0000000..2a67fa1 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/d9/40a17a9f2287001519af89c6c0264943 @@ -0,0 +1,576 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "quiz": + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + public static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (Quiz.size() <= index) + Quiz.add(""); + Quiz.set(Integer.parseInt(args[2]), finalmessage1); + commandblock.sendMessage("Question edited."); + break; + default: + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/da/c0b4ceef2187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/da/c0b4ceef2187001519af89c6c0264943 new file mode 100644 index 0000000..a05ec8f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/da/c0b4ceef2187001519af89c6c0264943 @@ -0,0 +1,588 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/da/c0e99ca62187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/da/c0e99ca62187001519af89c6c0264943 new file mode 100644 index 0000000..956a7ed --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/da/c0e99ca62187001519af89c6c0264943 @@ -0,0 +1,584 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/db/50afb721e640001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/db/50afb721e640001514c09dece48b36c7 new file mode 100644 index 0000000..d9ec7da --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/db/50afb721e640001514c09dece48b36c7 @@ -0,0 +1,72 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message = message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + p.playSound(arg0, arg1, arg2, arg3) + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e1/a094698b138b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/e1/a094698b138b00151149b99c05b1b975 new file mode 100644 index 0000000..97be521 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e1/a094698b138b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e2/c05167a80c8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/e2/c05167a80c8b00151149b99c05b1b975 new file mode 100644 index 0000000..0c65462 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e2/c05167a80c8b00151149b99c05b1b975 @@ -0,0 +1,320 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + p.sendMessage(message); + message = "§bhttps://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/§r"; + p.sendMessage(message); + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + p.sendMessage(message); + message = "§bIf you already commented your name, then please wait a few seconds.§r"; + p.sendMessage(message); + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e2/d01dd49f2087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/e2/d01dd49f2087001519af89c6c0264943 new file mode 100644 index 0000000..f9a764a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e2/d01dd49f2087001519af89c6c0264943 @@ -0,0 +1,491 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e3/d0df3dbadf40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e3/d0df3dbadf40001514c09dece48b36c7 new file mode 100644 index 0000000..e614358 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e3/d0df3dbadf40001514c09dece48b36c7 @@ -0,0 +1,71 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(player.IgnoredFlair) + flair=""; + String message=event.getMessage(); //2015.08.08. + for(Player p : PluginMain.GetPlayers()) + { //2015.08.12. + message.replaceAll(p.getName(), "§6"+p.getName()+"§r"); + } + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e5/c05785819a8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/e5/c05785819a8c0015169bb4f96b251538 new file mode 100644 index 0000000..443f012 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e5/c05785819a8c0015169bb4f96b251538 @@ -0,0 +1,320 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e7/507343312287001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/e7/507343312287001519af89c6c0264943 new file mode 100644 index 0000000..324368c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e7/507343312287001519af89c6c0264943 @@ -0,0 +1,575 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + + private static ArrayList Quiz = new ArrayList<>(); + + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u quiz add|remove|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + Quiz.add(finalmessage); + SendMessage(player, "§Quiz question added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u quiz remove "); + return; + } + Quiz.remove(Integer.parseInt(args[2])); + break; + case "list": + SendMessage(player, "§bList of quiz questions:§r"); + SendMessage(player, "§bFormat: [index] question§r"); + int i = 0; + for (String question : Quiz) + SendMessage(player, "[" + i++ + "] " + question); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u quiz remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u quiz edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e7/d014d3062387001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/e7/d014d3062387001519af89c6c0264943 new file mode 100644 index 0000000..f82a5f8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e7/d014d3062387001519af89c6c0264943 @@ -0,0 +1,306 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.IOUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.lang.String; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. + // A user, which flair isn't obtainable: + // https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + public static PluginMain Instance; + public static ConsoleCommandSender Console; // 2015.08.12. + + // Fired when plugin is first enabled + @Override + public void onEnable() { + System.out.println("The Button Minecraft server plugin"); + getServer().getPluginManager().registerEvents(new PlayerListener(), + this); + Commands comm = new Commands(); + this.getCommand("u").setExecutor(comm); + this.getCommand("u").setUsage( + this.getCommand("u").getUsage().replace('&', '§')); + this.getCommand("nrp").setExecutor(comm); + this.getCommand("nrp").setUsage( + this.getCommand("nrp").getUsage().replace('&', '§')); + this.getCommand("ooc").setExecutor(comm); + this.getCommand("ooc").setUsage( + this.getCommand("ooc").getUsage().replace('&', '§')); + this.getCommand("skype").setExecutor(comm); + Instance = this; // 2015.08.08. + Console = this.getServer().getConsoleSender(); // 2015.08.12. + LoadFiles(false); // 2015.08.09. + Runnable r = new Runnable() { + public void run() { + ThreadMethod(); + } + }; + Thread t = new Thread(r); + t.start(); + r = new Runnable() { + public void run() { + AnnouncerThread.Run(); + } + }; + t = new Thread(r); + t.start(); + } + + public Boolean stop = false; + + // Fired when plugin is disabled + @Override + public void onDisable() { + SaveFiles(); // 2015.08.09. + stop = true; + } + + public void ThreadMethod() // <-- 2015.07.16. + { + while (!stop) { + try { + String body = DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json = new JSONArray(body).getJSONObject(1) + .getJSONObject("data").getJSONArray("children"); + for (Object obj : json) { + JSONObject item = (JSONObject) obj; + String author = item.getJSONObject("data").getString( + "author"); + String ign = item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if (start == -1 + "IGN:".length()) // +length: 2015.08.10. + continue; // 2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end = ign.indexOf('\n', start); // 2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(ign); + if (mp == null) + continue; + if (HasIGFlair(mp.UUID)) + continue; + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString( + "http://karmadecay.com/thebutton-data.php?users=" + + author).replace("\"", "").split(":"); + String flair; + if (flairdata.length > 1) // 2015.07.15. + flair = flairdata[1]; + else + flair = ""; + if (flair != "-1") + flair = flair + "s"; + String flairclass; + if (flairdata.length > 2) + flairclass = flairdata[2]; + else + flairclass = "unknown"; + SetFlair(mp.UUID, flair, flairclass, author); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } catch (Exception e) { + // System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + } + + public static Exception LastException; // 2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, + IOException { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors = new HashMap(); // 2015.07.20. + + public Boolean HasIGFlair(UUID uuid) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + return p.CommentedOnReddit; // 2015.08.10. + } + + public void SetFlair(UUID uuid, String text, String flairclass, + String username) { + MaybeOfflinePlayer p = MaybeOfflinePlayer.AddPlayerIfNeeded(uuid); // 2015.08.08. + String finalflair; + p.FlairDecided = true; + p.FlairRecognised = true; + switch (flairclass) { + case "press-1": + finalflair = "§c(" + text + ")§r"; + break; + case "press-2": + finalflair = "§6(" + text + ")§r"; + break; + case "press-3": + finalflair = "§e(" + text + ")§r"; + break; + case "press-4": + finalflair = "§a(" + text + ")§r"; + break; + case "press-5": + finalflair = "§9(" + text + ")§r"; + break; + case "press-6": + finalflair = "§5(" + text + ")§r"; + break; + case "no-press": + finalflair = "§7(--s)§r"; + break; + case "cheater": + finalflair = "§5(" + text + ")§r"; + break; + case "cant-press": // 2015.08.08. + finalflair = "§r(??s)§r"; + break; + case "unknown": + if (text.equals("-1")) // If true, only non-presser/can't press; if + // false, any flair + p.FlairDecided = false; + else + p.FlairRecognised = false; + finalflair = ""; + break; + default: + return; + } + p.Flair = finalflair; // 2015.08.08. + p.CommentedOnReddit = true; // 2015.08.10. + p.UserName = username; // 2015.08.08. + System.out.println("Added flair for " + p.PlayerName); + AppendPlayerDisplayFlair(p, Bukkit.getPlayer(uuid)); + } + + public static String GetFlair(Player player) { // 2015.07.16. + String flair = MaybeOfflinePlayer.AllPlayers.get(player.getUniqueId()).Flair; // 2015.08.08. + return flair; // 2015.08.10. + } + + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, + Player p) // <-- 2015.08.09. + { + + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).IgnoredFlair) + return; + if (MaybeOfflinePlayer.AllPlayers.get(p.getUniqueId()).AcceptedFlair) { + if (!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); // 2015.08.09. + } else + p.sendMessage("§9Are you Reddit user " + player.UserName + + "?§r §6Type /u accept or /u ignore§r"); + } + + public static String GetColorForTown(String townname) { // 2015.07.20. + if (TownColors.containsKey(townname)) + return TownColors.get(townname); + return ""; + } + + public static Collection GetPlayers() { + return Instance.getServer().getOnlinePlayers(); + } + + public static ArrayList AnnounceMessages = new ArrayList<>(); + public static int AnnounceTime = 15 * 60 * 1000; + + public static void LoadFiles(boolean reload) // <-- 2015.08.09. + { + if (reload) { // 2015.08.09. + System.out + .println("The Button Minecraft plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + AnnounceMessages.clear(); + Commands.Quiz.clear(); + } + System.out.println("Loading files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("announcemessages.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsaccepted.txt"); + if (file.exists()) + file.delete(); + file = new File("flairsignored.txt"); + if (file.exists()) + file.delete(); + file = new File("thebuttonmc.yml"); + if (file.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + yc.load(file); + MaybeOfflinePlayer.Load(yc); + PlayerListener.NotificationSound = yc + .getString("notificationsound"); + PlayerListener.NotificationPitch = yc + .getDouble("notificationpitch"); + AnnounceTime = yc.getInt("announcetime"); + AnnounceMessages.addAll(yc.getStringList("announcements")); + Commands.Quiz.addAll(yc.getStringList("quiz")); + } + System.out.println("The Button Minecraft plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } catch (InvalidConfigurationException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } + + public static void SaveFiles() // <-- 2015.08.09. + { + System.out.println("Saving files for The Button Minecraft plugin..."); // 2015.08.09. + try { + File file = new File("thebuttonmc.yml"); + YamlConfiguration yc = new YamlConfiguration(); + MaybeOfflinePlayer.Save(yc); + yc.set("notificationsound", PlayerListener.NotificationSound); + yc.set("notificationpitch", PlayerListener.NotificationPitch); + yc.set("announcetime", AnnounceTime); + yc.set("announcements", AnnounceMessages); + yc.set("quiz", Commands.Quiz); + yc.save(file); + System.out.println("The Button Minecraft plugin saved files!"); + } catch (IOException e) { + System.out.println("Error!\n" + e); + LastException = e; // 2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e9/504e12aee240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e9/504e12aee240001514c09dece48b36c7 new file mode 100644 index 0000000..4f33dd3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e9/504e12aee240001514c09dece48b36c7 @@ -0,0 +1,298 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/e9/c0b3154ce440001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/e9/c0b3154ce440001514c09dece48b36c7 new file mode 100644 index 0000000..159e3e4 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e9/c0b3154ce440001514c09dece48b36c7 @@ -0,0 +1,296 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + PluginMain.Console.sendMessage("§6-- Reloading Auto-flair plugin...§r"); + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ea/b0d0b526128b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/ea/b0d0b526128b00151149b99c05b1b975 new file mode 100644 index 0000000..c9bd460 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ea/b0d0b526128b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your flair displayed ingame, write your Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§bIf you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ed/e0c5e59d2187001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/ed/e0c5e59d2187001519af89c6c0264943 new file mode 100644 index 0000000..46565f7 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ed/e0c5e59d2187001519af89c6c0264943 @@ -0,0 +1,584 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } + private static void DoQuiz(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index = Integer.parseInt(args[2]); + if (index > 100) + break; + while (PluginMain.AnnounceMessages.size() <= index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ed/f00520bce240001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/ed/f00520bce240001514c09dece48b36c7 new file mode 100644 index 0000000..f1e321a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ed/f00520bce240001514c09dece48b36c7 @@ -0,0 +1,299 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§9You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§9Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§9Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§9Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + //System.out.println(message); + PluginMain.Console.sendMessage(message); //2015.08.12. + else + player.sendMessage(message); + + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ee/b0b0b2700e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/ee/b0b0b2700e8b00151149b99c05b1b975 new file mode 100644 index 0000000..c6c259b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ee/b0b0b2700e8b00151149b99c05b1b975 @@ -0,0 +1,321 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw "+mp.PlayerName+" "+json); + message = "§bhttps://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/§r"; + p.sendMessage(message); + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + p.sendMessage(message); + message = "§bIf you already commented your name, then please wait a few seconds.§r"; + p.sendMessage(message); + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f/d05bb3872087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/f/d05bb3872087001519af89c6c0264943 new file mode 100644 index 0000000..f9a764a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f/d05bb3872087001519af89c6c0264943 @@ -0,0 +1,491 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f0/2032f0a2168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/f0/2032f0a2168b00151149b99c05b1b975 new file mode 100644 index 0000000..fc7ca65 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f0/2032f0a2168b00151149b99c05b1b975 @@ -0,0 +1,12 @@ +package tk.sznp.thebuttonautoflair; + +import java.util.TimerTask; + +public abstract class PlayerJoinTimerTask extends TimerTask { + + @Override + public abstract void run(); + + public MaybeOfflinePlayer mp; + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f4/409165a82087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/409165a82087001519af89c6c0264943 new file mode 100644 index 0000000..2752bb6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/409165a82087001519af89c6c0264943 @@ -0,0 +1,493 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + while(PluginMain.AnnounceMessages.size()<=Integer.parseInt(args[2])) + + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f4/b0f896bf9b8c0015169bb4f96b251538 b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/b0f896bf9b8c0015169bb4f96b251538 new file mode 100644 index 0000000..e0d1a0d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/b0f896bf9b8c0015169bb4f96b251538 @@ -0,0 +1,328 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + // if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(e + .getPlayer().getUniqueId()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + private Timer Ftimer; + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + if (Ftimer != null) + Ftimer.cancel(); + ActiveF = true; + FCount = 0; + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + Ftimer = new Timer(); + TimerTask tt = new TimerTask() { + @Override + public void run() { + if (ActiveF) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + }; + Ftimer.schedule(tt, 15 * 1000); + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f4/d060adb52087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/d060adb52087001519af89c6c0264943 new file mode 100644 index 0000000..d567fe0 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/d060adb52087001519af89c6c0264943 @@ -0,0 +1,496 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + commandblock + .sendMessage("§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + int index=Integer.parseInt(args[2]); + if(index>100) + break; + while(PluginMain.AnnounceMessages.size()<=index) + PluginMain.AnnounceMessages.add(""); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f5/60e49bf5de40001514c09dece48b36c7 b/.metadata/.plugins/org.eclipse.core.resources/.history/f5/60e49bf5de40001514c09dece48b36c7 new file mode 100644 index 0000000..45cf563 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f5/60e49bf5de40001514c09dece48b36c7 @@ -0,0 +1,297 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.io.FileUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(!p.CommentedOnReddit && !args[0].toLowerCase().equals("admin")) + { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if(!p.FlairRecognised && !args[0].toLowerCase().equals("admin")) + { //2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§9Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": //2015.08.10. + player.sendMessage("It would be nice, isn't it?"); //Sometimes I'm bored too + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + //if(mp.Flair!=null) + if(mp.CommentedOnReddit) + { + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName().equals("NorbiPeti")) + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; //<-- 2015.08.10. + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": //2015.08.10. + DoUpdatePlugin(player); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + SendMessage(player, "Flair decided: "+p.FlairDecided); + SendMessage(player, "Flair recognised: "+p.FlairRecognised); + SendMessage(player, "Commented on Reddit: "+p.CommentedOnReddit); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + System.out.println(message); + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + targetplayer.CommentedOnReddit=true; //Or at least has a flair in some way + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+targetplayer.Flair+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§9The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } + private static void DoUpdatePlugin(Player player) + { //2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL("https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File("plugins/TheButtonAutoFlair.jar")); + SendMessage(player, "Updating done!"); + } + catch (MalformedURLException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f6/2099de87138b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/f6/2099de87138b00151149b99c05b1b975 new file mode 100644 index 0000000..fb71748 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f6/2099de87138b00151149b99c05b1b975 @@ -0,0 +1,318 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit && !mp.PlayerName.equals("NorbiPeti")) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"§bIf you don't want the flair, type /u ignore to prevent this message on login.§r\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f8/b0609ebb0e8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/f8/b0609ebb0e8b00151149b99c05b1b975 new file mode 100644 index 0000000..05e1531 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f8/b0609ebb0e8b00151149b99c05b1b975 @@ -0,0 +1,317 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + final MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + String json = "[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, "tellraw "+mp.PlayerName+" "+json); + String json = "[\"\",{\"text\":\"§6If you don't want the flair, type /u ignore to prevent this message on login.§r\"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f9/408378442087001519af89c6c0264943 b/.metadata/.plugins/org.eclipse.core.resources/.history/f9/408378442087001519af89c6c0264943 new file mode 100644 index 0000000..f18f0e0 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f9/408378442087001519af89c6c0264943 @@ -0,0 +1,491 @@ +package tk.sznp.thebuttonautoflair; + +import org.apache.commons.io.FileUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +public class Commands implements CommandExecutor { + + public static boolean PluginUpdated = false; // 2015.08.31. + + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, + String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + switch (cmd.getName()) { + case "u": { + if (args.length < 1) + return false; + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(player + .getName()); // 2015.08.08. + if (!p.CommentedOnReddit + && !args[0].toLowerCase().equals("admin") + && !args[0].toLowerCase().equals("ignore")) { + player.sendMessage("§cError: You need to write your username to the reddit thread at /r/TheButtonMinecraft§r"); + return true; + } + if (!p.FlairRecognised + && !args[0].toLowerCase().equals("admin")) { // 2015.08.10. + player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); + return true; + } + if (!p.FlairDecided && !args[0].toLowerCase().equals("admin")) { // 2015.08.19. + player.sendMessage("Please select between /u nonpresser and /u cantpress"); + return true; + } + switch (args[0].toLowerCase()) // toLowerCase: 2015.08.09. + { + case "accept": { + if (p.IgnoredFlair) + p.IgnoredFlair = false; // 2015.08.08. + if (!p.AcceptedFlair) { + String flair = p.Flair; // 2015.08.08. + p.AcceptedFlair = true; // 2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + player.sendMessage("§bYour flair has been set:§r " + + flair); + } else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": { + if (p.AcceptedFlair) + p.AcceptedFlair = false; // 2015.08.08. + if (!p.IgnoredFlair) { + p.IgnoredFlair = true; + player.sendMessage("§bYou have ignored this request. You can still use /u accept though.§r"); + } else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + case "admin": // 2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + SetPlayerFlair(player, p, "§7(--s)§r"); + break; + case "cantpress": // 2015.08.09. + if (!p.AcceptedFlair) { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if (p.FlairDecided) { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + SetPlayerFlair(player, p, "§r(??s)§r"); + break; + case "opme": // 2015.08.10. + player.sendMessage("It would be nice, isn't it?"); // Sometimes + // I'm + // bored + // too + break; + case "announce": + DoAnnounce(player, args, null); + break; + case "name": + if (args.length == 1) { + player.sendMessage("§cUsage: /u name §r"); + break; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[1])) { + player.sendMessage("§cUnknown user: " + args[1]); + break; + } + player.sendMessage("§bUsername of " + + args[1] + + ": " + + MaybeOfflinePlayer.AllPlayers.get(args[1]).UserName); + break; + case "enable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = true; + player.sendMessage("Enabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + case "disable": + if (player.getName().equals("NorbiPeti")) { + PlayerListener.Enable = false; + player.sendMessage("Disabled."); + } else + player.sendMessage("Unknown command: " + cmd.getName()); + break; + default: + return false; + } + return true; + } + case "nrp": + case "ooc": + if (args.length == 0) { + return false; + } else { + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = false; + String message = ""; + for (String arg : args) + message += arg + " "; + player.chat(message.substring(0, message.length() - 1)); + MaybeOfflinePlayer.AddPlayerIfNeeded(player.getUniqueId()).RPMode = true; + } + return true; + case "skype": + // "skype:?chat&blob=Y_5Ob1BEcw0ZlstdUHyf0ENS5n1Xz2Huhx-5b-pB2JyMSRO5QMEALkJuTSuUaAb3-XfWXwCndwhGex_UpXDbyQ"; + return true; + default: + player.sendMessage("Unknown command: " + cmd.getName()); + break; + } + } else if (args.length > 0 && args[0].toLowerCase().equals("admin")) // 2015.08.09. + { + DoAdmin(null, args); // 2015.08.09. + return true; // 2015.08.09. + } else if (args.length > 0 && args[0].toLowerCase().equals("announce")) { + if (sender instanceof BlockCommandSender) + DoAnnounce(null, args, (BlockCommandSender) sender); + else + DoAnnounce(null, args, null); + return true; + } + return false; + } + + private static void DoReload(Player player) { // 2015.07.20. + try { + PluginMain.Console + .sendMessage("§6-- Reloading The Button Minecraft plugin...§r"); + PluginMain.LoadFiles(true); // 2015.08.09. + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + // if(mp.Flair!=null) + if (mp.CommentedOnReddit) { + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + } + String msg = "§bNote: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; // 2015.08.09. + p.sendMessage(msg); // 2015.08.09. + } + PluginMain.Console.sendMessage("§6-- Reloading done!§r"); + } catch (Exception e) { + System.out.println("Error!\n" + e); + if (player != null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static Player ReloadPlayer; // 2015.08.09. + + private static String DoAdminUsage = "§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair|updateplugin|togglerpshow|toggledebug|savepos|loadpos§r"; + + private static void DoAdmin(Player player, String[] args) { // 2015.08.09. + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + // args[0] is "admin" + switch (args[1].toLowerCase()) { + case "reload": + ReloadPlayer = player; // 2015.08.09. + SendMessage( + player, + "§bMake sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + break; // <-- 2015.08.10. + case "confirm": + if (ReloadPlayer == player) + DoReload(player); // 2015.08.09. + else + SendMessage(player, + "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); // 2015.08.09. + SendMessage(player, + "§bSaved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + case "updateplugin": // 2015.08.10. + DoUpdatePlugin(player); + break; + case "togglerpshow": + PlayerListener.ShowRPTag = !PlayerListener.ShowRPTag; + SendMessage(player, "RP tag showing " + + (PlayerListener.ShowRPTag ? "enabled" : "disabled")); + break; + case "toggledebug": + PlayerListener.DebugMode = !PlayerListener.DebugMode; + SendMessage(player, "DebugMode: " + PlayerListener.DebugMode); + break; + case "savepos": + DoSaveLoadPos(player, args); + break; + case "loadpos": + DoSaveLoadPos(player, args); + break; + case "updatedynmap": + DoUpdateDynmap(player, args); + default: + String message = DoAdminUsage; + SendMessage(player, message); + return; + } + } else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + + private static void DoPlayerInfo(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "playerinfo" + if (args.length == 2) { + String message = "§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.GetFromName(args[2]); + if (p == null) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + SendMessage(player, "Player name: " + p.PlayerName); + SendMessage(player, "User flair: " + p.Flair); + SendMessage(player, "Username: " + p.UserName); + SendMessage(player, "Flair accepted: " + p.AcceptedFlair); + SendMessage(player, "Flair ignored: " + p.IgnoredFlair); + SendMessage(player, "Flair decided: " + p.FlairDecided); + SendMessage(player, "Flair recognised: " + p.FlairRecognised); + SendMessage(player, "Commented on Reddit: " + p.CommentedOnReddit); + } + + private static void SendMessage(Player player, String message) { // 2015.08.09. + if (player == null) + PluginMain.Console.sendMessage(message); // 2015.08.12. + else + player.sendMessage(message); + } + + private static void DoGetLastError(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "getlasterror" + if (PluginMain.LastException != null) { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException = null; + } else + SendMessage(player, "There were no exceptions."); + } + + private static void SetPlayerFlair(Player player, + MaybeOfflinePlayer targetplayer, String flair) { // 2015.08.09. + flair = flair.replace('&', '§'); + targetplayer.Flair = flair; + targetplayer.CommentedOnReddit = true; // Or at least has a flair in + // some way + targetplayer.FlairRecognised = true; + SendMessage(player, "§bThe flair has been set. Player: " + + targetplayer.PlayerName + " Flair: " + flair + "§r"); + } + + private static void DoSetFlair(Player player, String[] args) { + // args[0] is "admin" - args[1] is "setflair" + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u admin setflair "); + return; + } + if (args[3].charAt(0) != '&') { + SendMessage(player, + "§cYou need to start the flair with a color code: &6(19s)&r"); + return; + } + Player p = Bukkit.getPlayer(args[2]); + if (p == null) { + SendMessage(player, "§cPLayer not found.&r"); + return; + } + SetPlayerFlair(player, + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()), args[3]); + } + + private static void DoUpdatePlugin(Player player) { // 2015.08.10. + SendMessage(player, "Updating Auto-Flair plugin..."); + System.out.println("Forced updating of Auto-Flair plugin."); + URL url; + try { + url = new URL( + "https://github.com/NorbiPeti/thebuttonautoflairmc/raw/master/TheButtonAutoFlair.jar"); + FileUtils.copyURLToFile(url, new File( + "plugins/TheButtonAutoFlair.jar")); + PluginUpdated = true; // 2015.08.31. + SendMessage(player, "Updating done!"); + } catch (MalformedURLException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } catch (IOException e) { + System.out.println("Error!\n" + e); + PluginMain.LastException = e; // 2015.08.09. + } + } + + private static void DoAnnounce(Player player, String[] args, + BlockCommandSender commandblock) { + if (player == null || player.isOp() + || player.getName().equals("NorbiPeti")) { + if (args.length == 1) { + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + switch (args[1].toLowerCase()) { + case "add": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce add "); + return; + } + StringBuilder sb = new StringBuilder(); + for (int i = 2; i < args.length; i++) { + sb.append(args[i]); + if (i != args.length - 1) + sb.append(" "); + } + String finalmessage = sb.toString().replace('&', '§'); + PluginMain.AnnounceMessages.add(finalmessage); + SendMessage(player, "§bAnnouncement added.§r"); + break; + case "remove": + if (args.length < 3) { + SendMessage(player, "§cUsage: /u announce remove "); + return; + } + PluginMain.AnnounceMessages.remove(Integer.parseInt(args[2])); + break; + case "settime": + if (args.length < 3) { + SendMessage(player, + "§cUsage: /u announce settime "); + return; + } + PluginMain.AnnounceTime = Integer.parseInt(args[2]) * 60 * 1000; + SendMessage(player, "Time set between announce messages"); + break; + case "list": + SendMessage(player, "§bList of announce messages:§r"); + SendMessage(player, "§bFormat: [index] message§r"); + int i = 0; + for (String message : PluginMain.AnnounceMessages) + SendMessage(player, "[" + i++ + "] " + message); + SendMessage(player, + "§bCurrent wait time between announcements: " + + PluginMain.AnnounceTime / 60 / 1000 + + " minute(s)§r"); + break; + case "edit": + if (commandblock == null) { + SendMessage( + player, + "§cError: This command can only be used from a command block. Use /u announce remove."); + break; + } + if (args.length < 4) { + SendMessage(player, + "§cUsage: /u announce edit "); + return; + } + StringBuilder sb1 = new StringBuilder(); + for (int i1 = 3; i1 < args.length; i1++) { + sb1.append(args[i1]); + if (i1 != args.length - 1) + sb1.append(" "); + } + String finalmessage1 = sb1.toString().replace('&', '§'); + PluginMain.AnnounceMessages.set(Integer.parseInt(args[2]), + finalmessage1); + commandblock.sendMessage("Announcement edited."); + break; + default: + String message = "§cUsage: /u announce add|remove|settime|list|edit§r"; + SendMessage(player, message); + return; + } + } + } + + private static void DoSaveLoadPos(Player player, String[] args) { // 2015.08.09. + // args[0] is "admin" - args[1] is "savepos|loadpos" + if (args.length == 2) { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer not found: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(args[2]); + Player p = null; + for (Player pl : PluginMain.GetPlayers()) { + if (pl.getName().equals(args[2])) { + p = pl; + break; + } + } + if (p == null) { + if (!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) { + String message = "§cPlayer is not online: " + args[2] + "§r"; + SendMessage(player, message); + return; + } + } + if (args[1].equalsIgnoreCase("savepos")) { + mp.SavedLocation = p.getLocation(); + } else if (args[1].equalsIgnoreCase("loadpos")) { + if (mp.SavedLocation != null) + p.teleport(mp.SavedLocation); + } else { + String message = "§cUsage: /u admin savepos|loadpos §r"; + SendMessage(player, message); + return; + } + // SendMessage(player, "Player " + p.getName() + + // " position saved/loaded.");s + } + + private static void DoUpdateDynmap(Player player, String[] args) { + // args[0] is "admin" - args[1] is "updatedynmap" + if (args.length == 2) { + String message = "§cUsage: /u admin updatedynmap §r"; + SendMessage(player, message); + return; + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fb/a04766fe188b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/fb/a04766fe188b00151149b99c05b1b975 new file mode 100644 index 0000000..6f4f0db --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fb/a04766fe188b00151149b99c05b1b975 @@ -0,0 +1,320 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/fc/20df70b6168b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/fc/20df70b6168b00151149b99c05b1b975 new file mode 100644 index 0000000..ce95a56 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/fc/20df70b6168b00151149b99c05b1b975 @@ -0,0 +1,323 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + // if (mp.CommentedOnReddit) + if (false) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { + public MaybeOfflinePlayer mp; + + @Override + public void run() { + if (!mp.IgnoredFlair) { + String json = "[\"\",{\"text\":\"If you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + json = "[\"\",{\"text\":\"If you don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Console, + "tellraw " + mp.PlayerName + " " + json); + } + } + }; + tt.mp = mp; + timer.schedule(tt, 15 * 1000); + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ff/d02051bc0c8b00151149b99c05b1b975 b/.metadata/.plugins/org.eclipse.core.resources/.history/ff/d02051bc0c8b00151149b99c05b1b975 new file mode 100644 index 0000000..7bdfaaf --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ff/d02051bc0c8b00151149b99c05b1b975 @@ -0,0 +1,320 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import au.com.mineauz.minigames.Minigames; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class PlayerListener implements Listener { // 2015.07.16. + public static HashMap nicknames = new HashMap<>(); + + public static boolean Enable = false; // 2015.08.29. + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player p = event.getPlayer(); + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); + mp.PlayerName = p.getName(); // 2015.10.17. 0:58 + if (mp.CommentedOnReddit) + PluginMain.AppendPlayerDisplayFlair(mp, p); // 2015.08.09. + else { // 2015.07.20. + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + @Override + public void run() + { + if (!mp.IgnoredFlair) { + String message = "§bIf you'd like your flair displayed ingame, write your §6Minecraft name to this thread:§r"; + p.sendMessage(message); + message = "§bhttps://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/§r"; + p.sendMessage(message); + message = "§6If you don't want the flair, type /u ignore to prevent this message on login.§r"; + p.sendMessage(message); + message = "§bIf you already commented your name, then please wait a few seconds.§r"; + p.sendMessage(message); + } + } + }, 15*1000) + } + + /* NICKNAME LOGIC */ + + UUID id = p.getUniqueId(); + + File f = new File("plugins/Essentials/userdata/" + id + ".yml"); + if (f.exists()) { + YamlConfiguration yc = new YamlConfiguration(); + try { + yc.load(f); + } catch (IOException e) { + e.printStackTrace(); + } catch (InvalidConfigurationException e) { + e.printStackTrace(); + } + String nickname = yc.getString("nickname"); + if (nickname != null) { + nicknames.put(nickname, id); + + if (Enable) { + if (!p.getName().equals("NorbiPeti")) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.chat("Hey, " + nickname + "!"); + break; + } + } + } + } + } + } + + mp.RPMode = true; // 2015.08.25. + + if (p.getName().equals("FigyTuna") && Commands.PluginUpdated) + p.sendMessage("§bThe The Button MC plugin got updated. Please restart the server. :P§r"); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) { + String deletenick = null; + for (String nickname : nicknames.keySet()) { + UUID uuid = nicknames.get(nickname); + if (event.getPlayer().getUniqueId().equals(uuid)) { + deletenick = nickname; + break; + } + } + if (deletenick != null) + nicknames.remove(deletenick); + } + + public static String NotificationSound; // 2015.08.14. + public static double NotificationPitch; // 2015.08.14. + + public static boolean ShowRPTag = false; // 2015.08.31. + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + MaybeOfflinePlayer player = MaybeOfflinePlayer.GetFromName(event + .getPlayer().getName()); + String flair = player.Flair; // 2015.08.08. + if (player.IgnoredFlair) + flair = ""; + String message = event.getMessage(); // 2015.08.08. + for (Player p : PluginMain.GetPlayers()) { // 2015.08.12. + String color = ""; // 2015.08.17. + if (message.contains(p.getName())) { + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p + .getUniqueId()); // 2015.08.17. + if (mp.Flair.length() > 1) + color = mp.Flair.substring(0, 2); + } + + message = message.replaceAll(p.getName(), color + p.getName() + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + for (String n : nicknames.keySet()) { + Player p = null; + String nwithoutformatting = new String(n); + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (message.contains(nwithoutformatting)) { + p = Bukkit.getPlayer(nicknames.get(n)); + if (NotificationSound == null) + p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12. + else + p.playSound(p.getLocation(), NotificationSound, 1.0f, + (float) NotificationPitch); // 2015.08.14. + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getUniqueId()); // 2015.08.17. + } + if (p != null) { + message = message.replaceAll(nwithoutformatting, n + + (event.getMessage().startsWith("§2>") ? "§2" : "§r")); + } + } + + event.setMessage(message); // 2015.09.05. + + event.setFormat(event + .getFormat() + .replace( + "{rptag}", + (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") + : "§8[OOC]§r")) + .replace("{buttonflair}", flair) + .replace( + "{isitwilds}", + (event.getPlayer().getWorld().getName() + .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04. + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + String name = e.getLastToken(); + for (String nickname : nicknames.keySet()) { + String nwithoutformatting = nickname; + int index; + while ((index = nwithoutformatting.indexOf("§k")) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§k" + + nwithoutformatting.charAt(index + 2), ""); // Support + // for + // one + // random + // char + while ((index = nwithoutformatting.indexOf('§')) != -1) + nwithoutformatting = nwithoutformatting.replaceAll("§" + + nwithoutformatting.charAt(index + 1), ""); + if (nwithoutformatting.startsWith(name) + && !nwithoutformatting.equals(Bukkit.getPlayer( + nicknames.get(nickname)).getName())) + e.getTabCompletions().add(nwithoutformatting); + } + } + + public static boolean DebugMode = false; + + public void SendForDebug(String message) { + if (DebugMode) { + for (Player player : PluginMain.GetPlayers()) { + if (player.getName().equals("NorbiPeti")) { + player.sendMessage("[DEBUG] " + message); + break; + } + } + } + } + + private boolean ActiveF = false; + private int FCount = 0; + private long FTime; + + @EventHandler + public void onPlayerMessage(AsyncPlayerChatEvent e) { + if (ActiveF) { + if (System.currentTimeMillis() - FTime > 10000) { + ActiveF = false; + for (Player p : PluginMain.GetPlayers()) { + p.sendMessage("§b" + FCount + " " + + (FCount == 1 ? "person" : "people") + + " paid their respects.§r"); + } + } + } + if (e.getMessage().equalsIgnoreCase("F")) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(e + .getPlayer().getName()); + if (!mp.PressedF && ActiveF) { + FCount++; + mp.PressedF = true; + } + } + + if (e.getMessage().startsWith(">")) + e.setMessage("§2" + e.getMessage()); + + /* + * Channel c = ((Chat) Bukkit.getPluginManager().getPlugin("TownyChat")) + * .getChannelsHandler().getActiveChannel(e.getPlayer(), + * channelTypes.GLOBAL); + */ + /* + * List modes = ((Chat) Bukkit.getPluginManager().getPlugin( + * "TownyChat")).getTowny().getPlayerMode(e.getPlayer()); if + * (modes.size() == 0 || modes.contains("g")) { + */ + if (e.getFormat().contains("[g]")) { + StringBuilder sb = new StringBuilder(); + sb.append("tellraw @a [\"\""); + sb.append(",{\"text\":\"Hashtags:\"}"); + int index = -1; + ArrayList list = new ArrayList(); + while ((index = e.getMessage().indexOf("#", index + 1)) != -1) { + int index2 = e.getMessage().indexOf(" ", index + 1); + if (index2 == -1) + index2 = e.getMessage().length(); + int index3 = e.getMessage().indexOf("#", index + 1); + if (index3 != -1 && index3 < index2) // A # occurs before a + // space + index2 = index3; + String original = e.getMessage().substring(index, index2); + list.add(original); + sb.append(",{\"text\":\" \"}"); + sb.append(",{\"text\":\""); + sb.append(original); + sb.append("\",\"color\":\"blue\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://twitter.com/hashtag/"); + sb.append(original.substring(1)); + sb.append("\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open on Twitter\",\"color\":\"blue\"}]}}}"); + } + for (String original : list) + e.setMessage(e.getMessage().replace( + original, + "§9" + + original + + (e.getMessage().startsWith("§2>") ? "§2" + : "§r"))); + /* + * for (String original : list) + * System.out.println(e.getMessage().replace( original, "§9" + + * original + (e.getMessage().startsWith("§2>") ? "§2" : "§r"))); + */ + + sb.append("]"); + + if (list.size() > 0) + PluginMain.Instance.getServer().dispatchCommand( + PluginMain.Instance.getServer().getConsoleSender(), + sb.toString()); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (!Minigames.plugin.pdata.getMinigamePlayer(e.getEntity()) + .isInMinigame() && new Random().nextBoolean()) { + ActiveF = true; + FCount = 0; + FTime = System.currentTimeMillis(); + for (Player p : PluginMain.GetPlayers()) { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.GetFromName(p + .getName()); + mp.PressedF = false; + p.sendMessage("§bPress F to pay respects.§r"); + } + } + } +} 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..0b368ce14fbcdffc79d020bc00b88646cda52674 GIT binary patch literal 32 acmZ?R*xjhShe1S2b=vdAllRFvpz#6ORtHyaPkW-?e1p?7J?A91d8uhqr)wi%NYPLF9VEHBL?16X#ulW>Iugc-eTj8)o-T5-V%95_|!l zz*-S2pTQRpA0VZTdsjLz#m~pg{PTBT?rt~VV0CTl>F4?JeH{Qi=tZM39Te7TwO?4> z%TRJ;SVZly#g@4oz4#R1!-&^W1>vq%K%cKk>moJ{&<)jFE>H**d<_fkvf|R8pyJXdVSw_OfF;sACakiIR9MP!cI5B-ypi;dt$_y|D>7pm(;{+q<*f zqwZeAfCCY^xDV$<93M=ie2Byc8)FO@+vLU$fiICF8I%uEVkN?MKA;FiBKg0nS2fi$ z-TNf^6+8c5y{hW&_xib1EEI&a;p>#w*UP_*QArGi(Y~rzZ}`pFt0ta1SFP`l#bD&k zg^9Nz^5Sqls(Tw|y_Q&;C9T%O$P>$^!p5W*ZHQYzeIeai)=m0R(%KLwE@IT(`m{H> z5VgWAL(VTmL9DUYG7~4&nYgKzlG@PBWTO5mM2{F4pY}%QlOzmA=9BRHhU-USeQF+7 zS7+S)?!>%LTcYFYDHVGPm;j@KSiMUg&F)s5cysZ%H`l!0Z+J2NTpEO8`{RF`-bWOS zj-D{Go*uEJ+Kj>(ub$8!F;!Yzgoy8zSS&JE+m3O5&!^<9LM(${#N$PmiKW$g!;Ryn zn@pQ1wc{uMeGg0e;psoJkBZDCwdYr}sRof)Inml+)?+Mi5~_T+$eK@usFnBPTW}5Ie&?P z-&+8Jt|DN^1id|1Zl7;7GD3Zt$=_Kd!uGYv4CuoQ{nmmIT0*;%2oHNVbdjI<%5N+P zQ3oiJg0jy2BEPbgUt1XB_7j$Sw=Q18EBuv3A+TKG-pEffLv3W}H48%6m9;2rddR&Q zo4SgT(-wl5i+61q**vzzJf+(Y)Gn=O>GR6dwQ>~s;pVJ6dJ$ynbd}q*12|vNY7qkpZK8Bi*OnVcuCb*~x zQ?e%5^M8`DV;1&euUIt_1mS#8_oDIX$a5z%j`MORUxnAZK7~85DV&>ggUPrH`QYbQ zGjam{>uNl_PKY&QZfnBZF*Vij1FzO_TUmGf!ut%r0wv1>Y_5%x4oU$QVf-hJ(88PHP<9f$Ab zF`%VQ`H4W)9A`birQFob(k>;XYiT#h<&LVYxrUL~o;Y!cmn5!$jt`(%N9Bv7I^9B3 zVAt?;E7+4;*{*y_ckuNybRuLm<>YmzRr$JvJ1ya^ezAlqAAS2EdY{@<`(+o_rUW*% zj0<0`9vWlgs4iCB%VnT5_7xntEPJ_XD2(mFt+cCNE(D>my*NiozN+XkGSszm$c)|0 zX}(?aaxqAaeH8~rk&qyBR|bu-Teuvnil>?Gr9o%xYs_%j%8dh^F{Bw;eoWQMrJywS z4K6=AeditlgvP$f%j24r8wfgMw+gYsl&o9=Dr2|V6|4Ip#?QuF51xHcsl<1Y(zOcTd4nAVr-OU%sJ@*zqvARlQ;gxOt!z~Q z&Bzphs&V#qr4vZOi?~KkAEM-3qzigFdClxC@uThtO=Xbl)lE*RWOr*MS7A4fy&ZGd ze)yFclRT1g!J(BOZayEyTuggy)PV?x3McFRNR5uWz7zq0zL z@c28K^F&9>lLFph(NEwt@H6BJEA`8kCk0VM1#^Cki-r)37e!AS)<_rl-7I73q3b%oxpQO?%@G);q=u?*?UaqhXjIqnTO$fkx4 zM$&c-4Rk&yPLnOU^P<-93`zP{B&=!QYCzqngYtw9*^CpH(DqIXJBTq64ZUJ#TB7=T zc2jOE+9PVE(t{9a?UJqVzI8*{_eC|7J^%=RochJgb!mj_5#4Z04;e_`~Uy| literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/50372563.index b/.metadata/.plugins/org.eclipse.jdt.core/50372563.index new file mode 100644 index 0000000000000000000000000000000000000000..f99454ae5908d7be59bd6ce707ae9ca514191eab GIT binary patch literal 29435 zcmch9S#w<1k!G^0P#bm|*B5kg_(Cb}I4LCAy!E+!z!4#Sp9g$uCELS48P zQka;D(7esVJoXQ0|A6l3j_7`#hkg);5+yDGMUhrScgM_2N550DWV64_Jm)S|7pwy5 zwiE$Y-Fr@+Jh^9{JVkrv&Yzk6*~{NxoBFtJfTWd!dqFsm)!QISZI2r!sU}7N5Q9 zlxx+oB+)BL8n6>R0E9Z9C^3^NVoLioE^UKciBEB8YQdUQ^xM1<_daYQ>y;UqZ=T_HhhayOeX9Ekh z3U+UZelB0muR0Yx&j<$Z00I$Rp?&A;rP4*fg^0|4Sa8;vM7goYk00NlZeGtwYi=CF zi85#N)yp7kZVX>yhlc3|Z$pjjl_3YRon75My?y<=_YCaa_uT#i&%f~E_g?z`%dfmj z@o`z^E9wafusnN2T|dcR&0j3lSBpSKR({S~C?L`&42VWS$xUDbo0KtflN-m^`?T9F z`*dW=<|gs{CdH>LCQ7sSDn(F3p536m5sb`D@a~5vseA51BheBQV+LAc!tO9JG2uO% zG@tfG@khxzc!ClWN4*&qyUx@3sw1qDSC1%?BzDd8g%5t?6qHf>cg5m~j$|r5ICSvP z;gL7S#wRAHjvhO4G7^M`cKo=(;rY2z$yv>prYo!UHJBNH&rD|simy0TnX*OuBG`4z zfCJ}w-c9ON8l0{dS>a{#-6XiCUKk#kJa!@yj7N{@N+rL+8f5s}XV@JUS!*lUKvZSn zdy!x*i(Z;}f_*iV?`P$kE3emU*nyK@69jHh+`{O(=v3B<)hg=}%L-9SEPzbE9ZB`^ zlZHA27wR<+un|Qib0ohlk37v(S+|zeSV&Rd*x`}Lr9D}TT)+xq)XNDg%~3DM?aR0Y z(dl!HEzEW5hre@}gJG5>XUp|9!zyN_!g_t1RJUB zHXcGGi}Aco-Hc}#$K9TQho1`{&gIudn&WinNTje?E#1x^7<1d-Ad9(45vDx>(Yxfp zPgDeT2%sf-_j^wM3fpSIM3imcOoSIS>mJzBgZ1e+cG+CvFO$4H4JB8RP1E7 zgbBrhyX=Gr9kov@@kGC)-c_geHiDiR3F(B4cd4i9)MoPKf&(A6EQGi%1C6s-%&*G8 zhqMQ?&p0djdZ}jP2G;%u)CCBv?L3q@eut93L1ZMKAJPF#6PZ_Yf~mEjt>@Q~nx|pS zi+KG`6*y0q+_H1dsa6rEsW1pyThxsamz-*G8Hy;6J{L^wqtISEG4}lQBC-`3`33a? z^?)y8>>tX*!0z=SlL;f=zvfm-N~SFu0Js2;u>Yz-s!zjYv4Kn$4y3-KE{wONW2g@( zxt2GCx=!5%kmh2=Ent%>JqL#=U6-`R&@ux6?58yj${eIlV8wB_;oL*YFfVw7Vx8oi z$b23sR)fg8NRbS-JtcNAHr1E{W{(*gr*LIqeFL-?0QaefsV6yt6^c8Q#xnsVhL;5_ zKu#79pma4~syi1}1j;?iVvH{UpHmM=#nU9-H>fgC-(y1i3-y!`@OwCF{F*ATP{^Dw z=(&2i;;eGMQ1MX!KLjy&N$f@gX73qDBaNLBfwKZhak` z!N4scypbe+@CEH*?m5w-FRxmJRrIciAC4YNPR9p z`0@OO)6?@tmivIgx%`G(G4puwyE0GlSD}Gq!Eh?1pVpC-^Du;(`Q>GOcn(%2$1?D- z%ssPFUNhdBggmOO8Yyo2u)rD%tD{oatRy}$b(A`bRl_z}>H&4SUeYwhk)H{^iRsZC zTJ!<20R0X5S%^fr41Za(4As1C?yop&?p0^Hyu4sZCwn_8d)vFcuq0X34B+PqZuzQH zF>&moYfKLl?FMCw)#(qaY6 zMqpgGe!wVz>{6|mHTNuvcSNNx<;$ypt8@UC0Xi^-x2bQXSVmmnQHNFdK6QbF^_t6> zw3$4B$>LOfEjHxk%{Q2J27Om_X1Y)-UUeEsfC(OSWfA)-9<=KDx*m9R*tkVkytZZ% z>0)(Z-J~ryNfgUnF0O36U$9aRzhfYwVx>mm0j0&#DYfrGSx~f6ZIKOZT2&64m7cr z#IR~vNX_aC);<`q#oFuEEn&({F@DCTaM>dUntxdVNM*Jq@J2nt(}1%D`56j6u?2e+ut!W3*ULmX`uGt?9?;D1Dx#rEN{PYbc3JamgvB`y;iW5EI`8qLo3hUjq6*(!Fs0W0im^*Otupetqk?o#iH z)IP24Q!k#bI01LTF*38m7fz9b2ecP2G{$dw)w_apVZm9?qyFmU6>J3>L}_oa+9V_b zeM{J9g*0F{cpK0Z`^KQcCeZpy-tKKt-t#Eb3lC!l534KoX>8390=)&NY}4sSqSG>u z!F(aJ0zzcuWZ$~GUN7ZqjwqJCxAG-6R24+c-$Os35SPG!Z;Gk){3SoSL;JC{OHRqT znlA?h*UBaou^AKE^%8aG#bK*itcuDEQxYDpSlht29<8or4;&gkGBJ6SlFJhQ@HiT# z&Op^b5X-{Ip-Rm(!1qt6ALc$>6To9cz~BJF6}MEy*Tyc9IPCmw9pO>cah4~U{kJG>tu(&fpf+^!dyOrVte4c#5JQh?jW(IeY#YjPp?Uc5>qkc37|o&BeDv6H6q}={B33;+ zNQp9JjCTU<>=EjD!obM!0YdobA|9VSNoglvsa>AXnW)F7xmeF97{K^G!E|ZbjBlS) zx7hKEm73vO1kPgo->44KU~^PwZn5$NAH4{$%k@ zu&CmxXm-rodTg9ip;#{u#ThEa`uWod{%JL~NhIFgYK~qL@u*IFC(C|T)4C&eOvYhu|RRmVy z+9RIb09YaG^Spo+ij)aDuz=XxI3hHBe$(gV6Sej=tG4Elh!r=Iuy$)vFFo1nZHQ!m zHA4Ay?{q}ynPS%HrjaOCoeEfl7hh9S&I{P7Y{CX8^gOqrZK-HH_6S((_csIyW)zM%*9fZHuH1%|?ofNpVhf@#{-Axx&} zp@nP3T7j$bLtx8Lpod^cdkBU+12SZkqG~_L0TvdCy*5m#b9sOfGF_(>KyiZs-eD;{ z>Z7z3Xr4hC>QqiF^FcLmzC{T>MaIj$Iwd70`v@d)N{n@Pr~s?GykAnxJOCW`M z%+Okuo#tm0ck3*v@eD)-%FA9WDD$bv?TH6|1#z~r7l7_lcDBl;m}0&pNP#e&0Xu~y zo<$ilu>E?*fVGfho0^>06vR6iI(`CzrEZc@FhNL)Ed|Gv@Rb>_7Xn}&QD>l21ruWU zzgu<7G``?rf-=KX6i25Erre{X9SRSsX(SeGMlmQ9_LlSe>x%(oYVijav>l<+Lpo0!mhceK^K(Bzw}g#AF!G5ke`O z!f2$+SxkpC83|2TnK%j5mrz+Xz)VkTkZwl$e=m58(i#czzCTEre7U&hRyE#cFO06#fUFj&u4s3s6md&l7=^Ax8O552I=VI z$TiqhAfgc&-Po`V?Sq#1jx^e>`mUz)}HPHH`Y1q`!lay2%V_cs`fRc{qkS5_> zMb7hO?Zj`;1cgy2EwuJz1kOy_dpKlCtl_i+z&@c~2`tX!YxxDVyA>oxXJeT~25AU| zakt3tYX~M_FK*8d*oUO1v_Q3+)VaMeI)*rcZ10VNVqNYSJ`4qpmMEJTbfEI)e2Bqp z<6=dZr%`4Eb}i#IklXMyU63D^O21_LxPd!8Y#Z@ z`2^LhhO%r))re#2XVLiCyeCQ~y!bxBbjBKqy&R_QZtjL)Y@nD)jrZ{FSkpS7^EJtZuHp9z12!!D@aQc8RDEe`b zJ?pvNNbr-)45YhJFTE_T@2p=bv^Mb;WgXis$zmNJWHr!p2Yl_|%xjW5q>969WRHNX zey<=uLglMVD#t-H6i2kc=391<3=|2vO?gSrKJglTIB(CL|1mz@g;SF%P#g&>rAvNI z;1$}I(}P39Y$hl*^zQWhJF^Rba}VW|aww=`Z7KRwnW8Ymp%Mp7spMYj07TzJpsK5lvRj! z2Yo^yXh_bZb|!n!(pe`;OJ#G8$~53OOe$q-1#sZA3v*{?&od14*36hFOMNKeni_&>`^WT6of=xyb=cg~u0Wue;lM5TD_;NX;BP0Ex$z^K} zIIc<7E*GmqQkY0jpx|f9Cqpb00QiXZZ`a5w@KM`ZXV}OIur2PbXXKHys+$k+J}TxB z@9+`=KO>1U)i20J1iH^}tDQsCA%p=c-6{YmzadmRNg1!p0`PHq=h4;k)Nh7;;S%(=HFDnyZL2}y95oniHWvQE>7;*f5W~5__PQUUcw=!XT&jpD zzWY|2SJ~FrJ$vZ}4EwU-db>l(rUj%$+e z%WHbrnnCpd=do&?j&?e^URn^7%0jB6aJtDNk5 zZ9?L$kPk$4@Nx4YY=BVZD{0$oXdl?5#+DLvtZ@KnH!F>9k0V=3fDYU>V$I41ij%U& zV?tvPFCpLlgEBZ~KJR>pml$e^Vk*1acAsIWY!h<>JY_963kEIblsN+sH zS@q+HhRK_9g6|#t$8Z9vJ!}jWZE6rOzb6CNevlF^pR2A)yICOMN^*ymEP`fKkk+2D zs-$KiM#b`qt3oQLp$)B5j4h;ln>MY@?V8u{!W<%Vo%UR@1P1AnlSoQA-@5D7qyLak60hVrX8r=4$*T zu&orCQf#ZvpiN4xb671a;#yc!%NhEtd?{11rc6QCZynEIgNG(Xn=eQSTT3_E-+}Hvfb@EN05J~h7+yz?A34}>>?Q(A zpGrpwH&7AwfmmG69p&6`E9^*W0C z8wwUo<(+Y&pOpOzIJm67)qtAH1O2(DgZV_%c+f-k=Mj?AEKL4e9hl;>4gd@3F@D zzB~*VXVJ=mk=BiAHnfvQLYAOGq>a1>F-|IHTOwyB=@UwH=!sPylubRWoQVnYdSSqp zMU-xXBRF$q+k(8??9gjk=kCROP2wpG;Zs9kVthAmDKQA=9qPqp`R)*fGnXP5-c4NM zT`zI(HQvTJ1mNyp$-!lLRUAV@Lsec$*&sN}Auk-SCbl+{ld%XGm}Pp+K~{j$b%GRu z=`j?aYZJI<&Q}^Ot_V`W@=8?K`(|`MY0zcv-^Yf%*3u0T0N|Y9)9A+QS$G~F#x=)oE$sNw zObju4!yOskIG1Xw)(oR}zoFUtQ|bUCWv|JD+}(8|^70hm#9*zXZh-MCMC}b1kv3^R zCoskaXy@Oe`=0ZGko!Jm+{$vXoG%HrxM9OHF zKc=KceL}zZ>+7a)#IY?u3P+q7S(0h zO=`SF(O+CGyA>zgOAZtN+q!F{^(!$v!Jv|@2@DM4`nQUeY7H011vrk#z%E(bi_(~~ zwqYL#@+IZ&nmg}a<6nxXYIM?ZNKTEy*B00h^LdtDFA$o*Py?D5*Yox_r8OC6rE=;u zT}3SFU)W}+qum8E-S01W;;p?HPPY1s)j1)H=?s(Y;R+d4ws6I}@E|15nBx=KHasXN zn}Me4STfBSON~nk>M+@zAySibQoW}WL#)OXl*+XF@Bc48*v9n|Y{18}jQEj^eVRp# zC@qh&MQM6WmbXdj%!M=N-o2ATAWWw=4q^Kua{KAXj1NiWDugy!=^AMGkj-Jgc=XgmE9VGsQD2S$!yD-glq&+Xw#L%(3J?@C1<1{W9SYDKZg@!3+km0N~=!j z?yAo|oWk-Ejc%XMUBo%r<~ijPtO5X`45Pl$n8!5O%$bhJ8RDdj1d2`tFPPz3$1ZdoB6Gz~182Mbl~z<8R{1ilxKy=W z?1;cy6q^8CGZ}%7^it%dv6W6n-x4Bgkl<%%|1Ko<(ha5s&O3oi!#RM^47=d~$EGVW zTp*C`d6%SN8>27I04VEyTd;(*bMc7XXDRl+}{(@o$Y zK&?fOYy0xEV>2@Z27X4rZe!~PQOlS%ma#*XhmR@W#wymB*tt7i=39Edjb%cet?kg> z;-h={hCXOx5l^}75QKSrcFnU3E2FAQmBM z4RkahP;3fs(qa?zs2@PvIpojjohHZu=Zjj4UZiS=r42~mdRlD?sO7(Y^uMtEFX?;} zl8yaB?I5V$Mg74i^pgmf^Y{q{{dvEg!uvErvh)-t+??JHTgBx*aK$ zpR-hDxk2+ypq|!qE5tuWsI=kSQy6!J`Is&=VfhU1Pl0|L!Iq~Cy%gY|A^<*Rprru6 zqjOE$erk8DAitqsdp9}$D5z&ChD+EFMW6f<4 z*JPVt(bPAj>=rbx)NX9jbZ#=GW>t}n~!#| z@8QGm=5jI4{_fGK2+w1tYbn8Wkn)>5F%vZQ5}B@e45 zu%dPf2&0s*$APl$pXjtVq{+UGL5q+fwnDjah+bP7 z5Re4+0gWv7fj=bt&NmuPgTG;)8_XfwR0e-Z6|=atR!_0NwzV)w*$4CktnA%OZ%>7+ zXo=Kr(LY9&2HMpoFNq(Xhqtk&Lp;V3_s=+$rKq1(J++Rx%Zh2FBb)e`{wcyOw@ZKH zoBvGI_w4zS)eW}&tW`b>%p2YLZ8{wp|Lv3r*Qo
    Y5+*j|1{f7e)7n{3axw{O## z-!?B_^78T}o0l(H1WrZT9aX^*T-Y0dT~<;&BCm;K#vU@ahxMo(zXS6ccE#V)dN3z! zSN@-Q-S6m_S0dOc%Wu$cLp6cF7}9^Fwczi6!C$l&Fljk(2RsTI>QAW>PO{rw^_h9} z4Q)2XyltwJIbUmc%OMXSzg4%SrR;63{gdsD(K2--BY~gPU@tGW^AkGN6nPHj?*Gp= z!Yj_NVQc;`49{3D4L^>k@(CHd{dHi=j=vcD9@GEusMK&U&@K);a&wWP{!OZTNc_bq z@CV7brmRIiYi|A&S`=(^$R@zxN5(gEnB-^XZBG7*e(3GHNzhuuKnes5eot@ic&^3= zEXg9HhZ+0U=^%D2|4jrXBn+Bd11X@n_S4ZW5d3;ZD z#9$R=2QXv@U(gR4tJf_-gm>{R&3e+_U}{=I@@$L}bvx#$g)G*P=x%ObUax7XnV4taEDIJU;_*0m)qLl zz4iqu*|+EvX0uvavb0>?4pab->90JUvTt?>;tzB>GRtiVra=*I(N1cpV_e=~9)3wD zg5|}QtJ+=a{{KXWT9TXtF!ozd2*29E+}rI~PHJYK(T_sqxK@Za9mOVi_g@3AUDP$p z$LA*Uz!T}e#)~(1{ddM2O>O^*e=}$t_kSbhlCy&6|3cX{^aQ%gXPg3lr?K;IDUK#* z{5HqmQ)Y#KGen<{{U2Nvk#RC@>YpiHt*<*3`S$i-Q*QvU&RF^>rEBOP)NjRq#%~go O%Wh46UQ=dOe)OMV6Vbo` literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/678131303.index b/.metadata/.plugins/org.eclipse.jdt.core/678131303.index new file mode 100644 index 0000000000000000000000000000000000000000..f02547475bbab9787b8302bb2bfea7b0edd59bdb GIT binary patch literal 220754 zcmeFa37DN{dEfmU&Av;c-5Ul^u))}}EL*l&0wZa(n2|=F8Ch&X9L*d_2hYqI=FE7Z zX`628mUQ{Prb|lN5>v8~P$1{!ij!hvhd_*Nuwxqe`~C0xdEVvB z$RTN(tM13e#aQQ@_kGs;x$pnIK4IgbBm2hQa_OyOlT(K#j$FF)>Ydl_4s9ns5U!}M z?3iiH@0hPI)T%4*)qm?}s`Itxj=j_S_s><&jO@I6X0F<7zPvM3uD!G~gzcT7d+hew z!g6zDC!g)h%C49BFT?xi8jYoWwKKJa+ER77u{5&tRsKuQ;o9<2eTJ84spG&>b@43! z=sG&rSYECzso@JcLtpHDUv;_4uboHds(00v_*eT>_4b;cpRUi>X!Mml&&Q5q%k?=8 zt&Mgs(_r*xm;PM$3N_gk23F>l>x-J8YadeR__`AC6tCOQzWGU27mC zJ9(>et^VxNpX+EoFyEf>Ms>EavOKc$3ckJOay_I!yY%Ne{kdL$cI(d#`g5cH+@zta zgUMQx^{MTdYs}on=dDxvH0#~&JzJZ(ZLv{jk@;!h*y3z;xn^J1mbQ0??Wgq8WNoIg zG+SHRv8URs&-f=s(yiY#?#p{a=h(t>efci>9ZXOAjIQfuu)7(~wbwJ8UHqRn*EiUWn_ZcstIn_m;+U^4%r@y|=C+l^z5bEK-4Oq|uijj&F7wI~>(ake(@5h( z1EFJI?bOPdk%7=YS6i;}-@b);=SYNK;=ui%-n+4?eHb}z*5c)l{r z4+9708mFpralQ5A!P?v+Pqwi_e5@SOcQ>)p=D+8j@6h_~04^o`LP4YaYmm-EJ{Ms;bHSGyK#Gt115f3`2vB(JP% zEb>D4bZxG-*jUoodmCrY%+;Jq^}FV^wOL!SxX_$4zwZaOFT4 zEFXM^)PI1!57%bSRu}3sSFvgntT6xWUcPIwrg8C1&q20uUyXtCVd&7pY1WuiP+OXT z!!V1k<=VVvc@-OavnnWMVQcf6q0l+adN)^SuBX0`9$fu93)nqz>fMaAe!JQ~ zT4fH<=NvB%8htf2^LZ$aZ#tH0tQ+sNL2;VoB*&>SUw^L-baPpQ?-sutrEhJjEyk6@ z?5>E6nY7;l{qbV|)KO*K(R3YKNBFMU}Qu zOU_H2!O(L1bgeqi`|V<`{I`w$;p>583v=~(=xug%e!ju?1I-#cGhc5uS=r`=ond(4 zbp6bZJ&nd(t-9dS;x%F_SHe&(?d3o(tjxpOJN+k^XMl0^G^)$~#jEwK{_N79>%@_H zdf?E)G7GX)Xitsq(x2;6%R1yQ?~8~0^1iTcs`d)_op1UTbgc*YX5GRW2GZqA)a0Lo zQ}y}9x!QQcA4PWbA(s};cyBasBeKzJRYrP48%GyTc=4 zNOMPOZJJLzxRH6Ysj45n^(?2I}6nn6Jg`x zZkG*(UO)A3uFuW!<`!pDOSOY53(M){k)1b+cJ*i14Gfdh*|)H=V=rt;GW`;0Oy^33 zOPBV~)5sLQ?>t;vSQ*(Vyu|<855aN4C|#qovs!z|)z}079n6G}38z*QTx4_tj?V^VK)?hBy1?*VIZeQ(@o!9aBwL*59@`QlmYr5e# za4f#)p8~E-pGD-bF5o~t)UK04n{jT8Jn;XHy^XoX5?^mao&gG*J4Dcu=Y}`%BCTgz zMB4+}iR^Wu*(>2-Cdd7N@XW^Jpi%&;7+C7)^|W`b{_F~S&&wL-(?-q5xvy^MI_D8; z>H62vJ1cd?k`eWeh>)BDM@pY`$VPS^a+f^c4F+#ncAYx2@}}H zXwZFW5(c#8IE#iQY@)ILF_wo$Hpy%Rgumb=e>YS`Dp&sxr+k3INCOlN? z$)-hvEzKQA?Z4VU(+38c^)m}71GVKT{_(QD(33Iwmmz=mvtZ4$h}kw+2VWQ{=f7Q% z0{CaPdHPv$162xTNNhk&y28kBj>?d~4!{8hUHmK#%0K&}EU`h*j)>sp^zS&FBR0@j zk%bfHbrs@j1L07d)dP5(w^=PA6S38%madBIxoh#&<%5NLS8ytZ2u)WWLPTWUt z6xjk)5O`_5R;=_+Z|Ip!`0)~0))dN!@py>nWnE#TuT*2H@Y2hMU4vn~?dpePUTKC< z`9Qdw^Jr?yntDky((sOJUU=b!yTkg@Sa<2$b9aZfYj<1|Lg))uhU>%s6@DW8%kXpI zyOo~GU}dCob?6lzmtfg(EssANHkQd1M!n-YS_f=mfJnm4I=m+I8Mo7(TVKD#YQ@u_ zMt59q4Yu86Pd^xjT}lh1ar6ZbH0&qV>TwqXUKhSrIiS(+NVIxntj+=}PHqyJ-?p6fX z56+Dvf(FG;j6lB>hFj&G?dRiR>z=!oYokj`XaFnAiz~}h%W#2t>xKzq2a8&cor@Pv zhl|e7;cW*$88$QMOqVRrXSi@44Tjr_tP7LjGhx&I`kl2|%xl$I_|>h|xs_VB~;j!mn1piSn9(4WX+WVg-z+0bkB+Z@?t`}@2r zcy{cEIP(9u9r}M2-p_X39X=5Lb@*WTX_&yzhYy8~ldVQ3Bh$}>0UeLxr0)rR$pp!n zWQWeNLuG&-$G346Beh|^4-UYBn*1s@e0RRn5v1<8k>*cJdd<~rVS#aBFbu%}c8Awj z-Vpk1pN+}ryj;hR!^R!1;(;5(P2siS_2CD@8^fEzXxJYPhMU8i!;vr%j)q&!g z+{*bn9sX|k&G1|7+2_I+!u{ck;o z5iScO;RnJi!{yiR zTj6hqzr#BIX!x=4_rl)~{~-Ls@Q=cehkqRYN%*JXpM`%O-WPr{{EP52;b+4ygkKCF z4xbA5u;!l*_lD1h`@)0a{|Ubx{wpj0J1W;#ZmhhP zy@OmTKUjGqdpKIzQ`uV?tL(2FU_TF4Zmzt!GF~}cIZ~OZ9If0^nXVkG+*&zad28iu zmA6;k!G6E9aI>dDW2R^k~wB&*sq2kp-&pk};lG8igh#^fgx?MSJ$yAh8XgN@3y+54@B+KF2Ixow-IThCK*ivdO}0_#2{;9E*lptOSA|MV!A^RT z#(VCoVK5oY9J;X=J$MS-2K8TO0hDurcyn??V#D7Vq=n<)t51>qYUgOI}Q; zvE9EHiJ9$IGNR!?KMs~SF|EYU%m&=J4#Vwd)NbsXq;%9UkSe&{(bnh@ay3}gx?7NG5jZl*=_V$S zctQD>4QqXUkF{g4sr>Yov|VC4=|~&F197s?lKAV8s^c)Af~nZ(;MSbqMpKpX$##^U zN5lWn5i791okk^(tbRq5r&qqqD_4h2CC*i5zW=Ud9k<=>gg0&mJZwk3x*}wJ4RaX0 zhKBnQbxI`QEV3rwlp%7jVoM zz>W`rV7`J#c($-^jv%k8?5gZug+t0HHnRt`L3V7+I^loX5c?+t0u7}xnu{!nb-Ct!}p3zXWrcXjR>1ohZ4M%hTSfpWWmvk8b(L z0+@==n2=qE!gDB?xUuz+Se|ax%-Jnu4-^NX2ABWZJzloG7m<1pkixM^Opf=tEa(MIFWw_+ry^m+{0gN zM*+%FteKto;VLM+GQu;iZE;v+kJld(4GuK1!fZaTUZMT`XK=c zvScY@puA#(&KSlph|ORwGv=`sv&EC_a}Ln;{dNHQ+R*$wz#O+iPc)Lpv(+nBWez~G z+9z58q$vHFR*~#%`N6edp3m-nxmv-%$T-uk96jC}w(P4F0&R-3z6ZdL+YnDk;iNOe zb(L!?Z?Uz4fg7wYzIFE+Z;3(wOc*Lzz-_MY^Jc1duF*_s^L%;>VO7*v#9-T!EHO%u z=h^8%YxQJkgEbq6yiyRtgh_AGQcTmsQN*bkhEwdosPWSnzWyBs(_gL}&T+b<1T)0m z`eI%b(@8#^zvsfkbzkG91Bys0uGl?cKv1asRg2X)S*kP8rg@qf`yoQxCda*f)A@_0 zFX#%fWydsAIO0T{hJOz5`Q6Gjp{uByuw0I0w}K*uvz3M8IZ=uR_~o;$G>D!~R}adu z&^nt0pW)Sskt3AWM}?|9^`02%XMY~?3I!`J(B0uenrjIgD?cE0Mz31*Sj)@$&2WK5(v{!SI8AbT^qbM)-R^FV zzZjSLQpg~eIB+D__4&>i?2-}X8y;z41hE+nzJbP*3_UXJxb`FU%u)Q+VE6;TzRTjc zoad~zmqZo)zOZ$TP*xcZ+1lsvGI7v6v?eWe&P<;MA?2YsYyF z^b?ujZV=-ZUye1|l?6co3qyGzyG+q7A;sML=W*(=A zXiRFgqZB_H9*1A78RugJc1>*XO?SA5F^dH-`uuR{_TbD&Io&{qhr*^jCacA; zE80wfpe>6UL*(OVFBAic=Qq(yf)Fg!XT#Ptg9@F!CfvgIWoIg}8syH!3?hoC{P*&b z6!fs-5BHc}bgUHAS^OPtCzn_8D^N}D*>tdZIt-@x=YrT+zt?aKHI z&PZ3^sB+jZGUL)lY!K4dTt9t7beeoB;YMaR_5l+6sai87?@Oipa@it_m} zF!w_BJZMm}eku$&i}KJ69jZ@+{yp_G$!YF}f)u!>6%+6+Q3tL8Yz0JOl%&AjAv&I7 z_?ct{YN>2lrBDiWAS4mte0k36v$(UOZL&qYn85<^lIw-?V#>Sk)|BaRH`-u{qTGO7 z4HqU-K)K1RMuruQR<`Amuk}}YScfm~aZWo(r{eq`JlA1)e%vyNZg;F8#emfN6ZT5?-%=Ugg=Fmqmb)R zexMB$!Jre;lSa^zV^MxSgPSmonHITi5DC9m`Hd9s;wJIu^T-ru0q0}|QG!$PtwM-X z5gO_&UKsj}l1z$=^W00oED=%#`5EJ%$_)s56$bRerE9smd<$iEoM(AH#b1sSjDJ|f=(u7YwW1$a|f zh-8{gOuYCG%4CXWOGa>`0|iMG!yR0hJR90Gxq#tZfvSam2E@RMjo%}U-m(}93gA7V zJ6c*qv%iQfvX~WTLg$`h?qC$3CAnhe0hcR%+5ii%Hcs$+$g8&)o=D)~g?HxI-tnd_BjJCA43=o~cDfr*212pA)C>nEGtIuRSHkGow6<{f(vh zD#|TiUKBPUaMy6g6S|2jJsl+L_nL4)l5>%RXVNT&(-w4lXLe7NoP;LAIMBl~>8#Nw zk{+ccnx{29Eq3fG1_i`3qL2&2K)GOV(f339X7Vc+YYQ5(wM9JV8LX1V74ytAlLmvO zD6Dn0$x~raE7Dk4CMhvmPcI8Sd}nqjmy@5;(GD9|nzgCg zVwF5?1eay<>1R1+w^tl5{DAw>!Uj@+SE_T;V$rUb?y{jjABGl{`AGVP2~zv=3!$$% zGgE7lkA0mD=&>-&AT6dmK?r;Bsj%G_$h%%)6a;a31ST_nn%uBPWVIUAx^NBhg}e@} zDXrNm-4cei0VQot$Kv(YXUS`+J`rwxO`I^TddlwQZPDIRU7qJ{wOjFANer;syml02lslNO%s|hCem20&KbM2!9B@=g4Ia*vmYttaiE!KD4nJ{HJT z76Y%Jj_dHkeKvtSgF3QNsK5@D+k$+oX=&YK)`2=?5lfYkaFNX-F0WiRb-Iswn+W7w z*vNFsCbhWjif_?5nyQjzn=inl_N6mH<9=F|XTrvM^We&SeXed#nj{kIU=8B7Uw6$l zwq7`%n5nBDNq(X6ZWSeDY$s)b+B!ZM2IrGvs(@6D`)O;%T_LmhSYp%SHgUI&#s*m| zakafGOG~VG0#nxPIpd{AYInl(oYBD`*VBN}k!^*`jl#D+Y#YIaVH*ucWMDBEj9!_m zam@YIS)HMzGJ(B^Ic$p{9m(a4CRm|vEiyS>TCWc&`!oyNiL-K2T;ojI}ig-M>?AN*1!(0G8YKNZF=8{QxPg~%y=97jn+!ZG>Vpo?fkjb=t+h{^k zvQ~AT;_gEv3CBjV8T4;B(&Yad$a@;96B{0HG$~?W%k#K(=n_{Ge*jT|V<=BgT5pzb z5C2>{S4bG#P^+7l9kptVK0#C7)ihW!lZ8%)Iys4AGeL|gks=EwX(nri#BJqC=FyfJ z!keqj8i9Akm}HMf{&?uu(7jjp$#?{vxC4Zd8JlKp$?hZhlwufnd7zl}@x1ZIOdLf( zOWq9!W6I=|r)+h{gpia7G82Z1n8Io7-q3mGy>(;J2#WsZ9rc7kHF>fvW<4IyBZsB; z-jXelV{$kG3uJsb!{iVJ=YJDRkxd6iKz)+9=|l64Q&Uo3N@yqv5+;#Yk=r7lwl2yL zTy*!Pu)ewoik`iBYT^jsn6xxHe#T{UW-o|+4zRdMJ+*ZlF^%hd8bd#ir^BeeIH8RN zlsYU7%IvL~d-WyAd$cDOtg5qaOY>QWEG9&xKRg>co2+R>f{JrWCxS!}7_K0Ug#2Z?#hQor_@fDcT%Q9F6KRl>FjNA=+Y)JHbOEeha`_2y zAXLf9J+zQcscr8g;X>%rxA1tizAP?Ogf3WH*4LY^CetiwsCM8UglsvVrI0rt#v`Ez zu4;B36X-(y+0wZ08GAgB9N*)neX)~!OIl@)EHJAwy7;8Gf3M-+lI=y$WRucC--PZu zh;6Qz`8ZXhBQjqIcwb`$v&7yxqTdWK^Z?wIBP7WF4LpB> z>;3gyHfaj*8}=@G!x*Z-K^P#a(MA_@RCe6Jlc&RwX$SB>0~AI=-R2)tl==O^J!HL7 zVaBTqXKY-AW6d-`+?0@zoDhroX6S~l1iM5fA2J2U0-{)px7ka?CNm~co@mO}55g-A zNQ%rKFBUesDP&)*IkQx^3JEsBKC@JxlP#YVV{H_@Jud08n!Ie&S2`Gq)0O5D8*ld^h-8NKbz|6 zi}v|=eRlb*%{rR9&Q>Gl(n@^Ya7-SwVGll*RBjI>vhN;(6`)kKK=BPC^_*aQ;uzr0 zU_6ZwK)j?qg8%&;_0f)vm?%w@G!YM%ru4A!jEI!<1v;HE&}g0Dn`gte zdhnJi2#jy9_z;}jX1T(e_+ITYrS?y zv|l2#Ff$rk%)!SMW~YlR&UJa?aMIxpFItGK78h&tS+^zdm1!jE;&D4H(%I@&EOX0M z8~=Tw4-Q39B`Pq9Kv1JWjK+D7*O$+_^wrk0&X0uuPKdWOKbx=5a4(ha;0WHYBu_yT zzKDYp;gA&8d2Gui(Z+fh;T1Ilr#+`}Ea@yoClj@wqV(-U=Sc1iXQ>g}J;W@NWyQAfVgS=^ZoLXUN z>ej=fw$aJR%X)X)7YA$AIX~VnJSv--y2#I?@s|fouAALei~Xfw2GunIdJcpnrU+wZ zB(|l3`g}v`vA{#(JjNKF4c+i~AiNEe^=F%N!R6b#(Fe8~9}O?(i1V<_!%;p8+LR4L z#r@aF=*4A$WA4X|kNHwMZdl@p}ZMWfJA*EE-=o!M=t zw;hN|Rv-XXmfF2k?J+Vu_fb2lnC((@iyg0r!gii&i3-pbB^GHKTS;Y3xOI1qTREXV z(}F6wKB5cPp}e_oJIr%=>C@U$ZysyHwOp{q7zZPs`wa=9Y1=^Eq=Kc8GY<>%<$S5x z&Ih7K>3%n;rp>ag@IS*Z)5($l-1hvNlufHHK)abF;}kh!;tgL`UwwN zt&Mqqj!HoC0(!})B%vW{B(#hS20EnCxFO^|(-X2(0lNQ=J0G*MQR4p5!}If*60QdP zI711lgn9;_n-y*lTfnoJLy)AQY!2%eP27vOxX__Df=2T3YKzQg~h#_ zC&N(OEy_(&CepaiEtubHOUOE^jwXF9?G>(q#vLp?Y+sA|1>-}}n`_^IH0dZ>a>Rm+ z8OTx~j(#k!O>9p;p$c>pX!y3#A95g=;}msqu`Oj9wAeDPQHO@B<+-f6oPL|~7Td+# zZ$e||sLuou=B93Y5RlH71)(8c#Rl*tHe|Wf%>2riAX*uS3vK~X07(u^Z*&gu>z-yp zb~f8LYZ<~ zS>0>Sg#9X9 z=}fl5K9)Y?$0Fr8+yQJFiM<$cJ%S6U(ZoVvd4-}SEJuD=rdH}Rb@$i5@ESW+#kfUz zWehW^|wPCz4XTYc-}VgoB_l?w>YEswEMuczRcN|T`0-ueY0ps zTpuq@q6G5*Aln$4u`v^4 z2x}eM77%KC0rU)UJuwq1DA3?!4eNaKtl3k5%7&BM!oO7lpgUHS2Z043xtQXaKb(XP4ehgIyc*wY zf@G$%&JJyL3o;1yBsYV)cRVx!9k8_`|HfnXr6cevTv*25*6>P;9ueZr!@&c(#H|->h;0IksY?+=o>52TEVL10o;#eK+Gw!F=PXV(2B+eD>ac$|~3b<4q z0p{RAsIpNu@zrBN=DikOvV<;Nr!<>Q5fwX zFCGltyem+mPecXqsTiBGDf#5-5aoP9f=vT?KJ-GG9xkBIuM4kWiJ4*|DwoBQ=`9N_ z-G%24Gl}y)^YU_A8G*Jmb#dO*`5sYA`Np5O!vUt9NYLho50vE}H4K~RP;32lGb)P? z*Zhs%@<7b=o{0UW#(ZVJ!$!3BWL_Kr;c0vk{G*fT-0Dx$wu^5JRSTK3;M>O33(ikT zbKhu#Yi)?@KGaBjHW5)AETeUmyTuzaK;S7tm36xBGr*EvyiZNYGS?-ai%JgHr#y)>h z+!q(43!p@P8m5PNv!SazjgqGY4NWxu7?ew$I1Yk9)kjSW}pd&Gs3C z$VKf)&k;>1jU~5&H?w}94n5{#nmBC~+v;Ny6xMXIWAcV5nM*e~*(!W3^vo6vm(Lj7 z72P6X*?#i&2=2d8NcyPadp)QFhb;?aT(^M!g&dH@xw-Ori<@)6UCbfS8e?LK%7PPY zCN81>#zMh)YAKJaLa+KPMl7LtPN#BBa-^jwW~yrYYJ&(QG~ECq0{TS3c~elyoMC`QUXLyH?xh<5~p44%atAvFd zSqTxx-rD1~%DF2^Lw{1b5wZ&FN%b^73$xp~HwJT?$d+UNmZN*BcAthBrZ_L10wzW& zYhi*RH!or3nUm+qLA44mYC&v&wP6pK6QCgDGofpA^su`~*NpSA7}Z#D${r@BX+G)Q zQh;Kg3TW9N{$0$t^^paMpO?Oy&+MGL-kz)>Vl2RzKlqLMNBH2+2KY1MjMNQ$2U0zTRs=xW--bZ zQU1bnX7P1!dsDvZ;$T;;1Q%J$~hjWgxLx;CDvTw;ng z9$?M&4ws9?91p^hX5^S! z7`u}Y6t~%Y$Rsm#C>OAZgZz8iWparWq6AbY%4VgLtbUWd@JOB;Rg8)$N6z}5U@2}a zCW?E3vT^ieU_%{~@Dp(Z#Tnq0>kKz+axOT!tT1aIiuH=!yB_1K?DM^0;M58V((>5+ zBGj+HN{e)?6m7t*)9+% zp|MYAF`g4!(siVFbi2vYHq^2&3f^7gPwJkOb%y2~)&$p&Q@Qx#rVdI2F0kH`p-2U} zNWeCmSf-!y9byQ%sJ--1UB%|1pTrKsUENZBgy}MzHlu+glmG194TLvgt7@7kM>~V*JoCl+JW^^()GBg$ z&SYF`ijx{R7lz~R=De75p!k`&Y65 zb8*g_nOw3OWjdjD=AnFNI4HIlauDS#-$H?ybqb$bgbmip$gm_2GX z038u?*|4~hEh&n@7Lr;&G8VXCHQGarY*WOU90xAn*H*Mda5?--p7lgRfKt{%QS{xO z!@!j;4^#I1yH?{$MZ{GoekV1qZm_x(T8CU|vekOP93zEJSV4kAq@Tv#fgyP|iG3BnVF};>mP-I1`*f?>VUajis2krX9T(B})nsq9eBkOmQ$g=9Tge;+ffD5P$DG zkH#Z1A0ls#iHE&?!61YZ zq5Z^nV@|8iaa>ryb$(3~#{75$DJ4KJLVq!!WwMZ?cD>2|!Z97hRF}DG zO)ov)9_etc4pN2l%whM*j6L5nglckkm>YYUg-GB}Qlv(X7Y8#M2FWrMwP@lN zi=l9s+~@|**#dL5WDlE~5bXkPmNXJ!eheb3l^OS|50zl~E{hxRCBy`H%*x}rq|H(+ zq&~(f9i=GCRh-o$8$`1)Qq#HPcMN@}c&a!ei!6-g>9?5gyLe6nk_ht2XPQGkpJ;Y= zU3U1<(0~$gq#Ot!Z8Td(@MEIgbE_;-wWhex`b@H<((M4Gi6(z)4)>-;i`w3)^J>gw zE&G}x0#d&@DuD7cq>f|Q7?I(@sCLE(QP(>KJ$wi}_g7(9gWM1I(yHdXI!|%Nu&hPyx3*y9bObU_`X{gjOtCEDf zb7{*fiJ~gSg2{@ILhbB0DmYf9o-)}kTo?-|WhgMSs%6XVXZZqNCP~Lq_;Dni5nGih z0H!4ih(mRnN1c~Jb!g|u8W3b)m9hgeRVNk~~qa#&N;bdX_vU)0lgT#WZ|UJ6+}KKwAS%;kJS~tDvz) zC{jPe39&Jw1)0^tM3Y`5c_c2L8IjRmWacqgV+t#n*w&(OH-5N$ZDO7=2eAOBp|dc>yPuCHfYXZPoZl?R%Zy}(`tTs?KLr2RdZ z<4m#o7Y}TZ5w}2BnhwF2tP)EC2qe+N;u38JZl_@&i4_~B@_9wNqQ5qJ+#G|T));iB z;tgzjJ2R_>0;Fw=-85~GKm_UKRX6*1xXpR>cx<4m6NeQhYO5YoYT45*%Tm^0TwM^f zHkg&;TJ7D}0hJzooY!B|+KgDRyUZnPyyW@NcFam(Scp8CNHi;I{M=M|t;NXV=**LN zot;o8aCG)|*%#dmP9+WA2cs&{hu2?f8n0!*Bp;=-2Anf2dpSGUPmGG$c?ED1`eogP zf@GUd7VBtS-+-BV?tqo`no|UXef`?d?Zz!zrgcVL(RfnMp)yF7Nb@|^2b3C?1lB|} zBpUb9k$gD3X=Lj7q3OK`Pfm~S86O*|u8iPq7@5a|U0r#v{%aDWnf+_T&W8nim~_!> zpHz@@YgnOZ0AH&|!)Nh-UkHPXjm4EYtjh(#W9I#c$fih0YvCH>pbB2JA!9o?*(?4S&jasb7HKRTI9v!`ecmD(T2{7& z7bq62h$32kM$=kazD?SuEtrnJ=PH}vu=Ts0J(qyzG!WZs-%rhQzSX&-{!8BEgzNoL}!Xi=g+M)YDekIn0n+pwGl9!Nn1Yw#H%Sbd#o z!M>^+d}CX2w=9a$kKyr*Maon{9J^U?=9d$#gz!CLarO75N(n~LTsTc<32EK4u70?gL;)XGB|mk7czab6nB7emag5XEH$koK-s zJECY%Eoh#rZv{{yf8hidbOgqQlyya|Tyy7LFEInrmsgp1A|{zCB|OLg>Pn+;VZlzR zb4wN;E^3QCWx)FRy; zYK*0i+ra;GYp5N9b9-c`38KUebnDVu7E%e{EJKaN93akWb=#B!E460K_Y)QgkXZm? z31{CO;bC8vY?Eve9yg%ne&}?z4KIA&en^tSU$r;TBi-IgC2ZY)y~nF}s88Gx z+Pd13dmrPHXVEdak_v!>luAkMK4x*RRZ24(iqsLlG0p|RPoYApN0!;loz60I@-9R9 z1cyZzc8;@RVH5$4lt<>hYX>p_N9vRe+HS*>O#9=_1rm&2hs)p=*DGD=OIlWreW1f8 zEbyUeT{GEE)DDf5!nFNy8Ap9=3}qcA@bQ$=J5p3 z*g$cHayYr(f7I0)x9df>jFC2pIK($JmXcz-*N&brTIPoMM%du=W}wcB(y@_Bf3mJ- zVhv-KrNev$*I=dPmLY!3L|_W#)YOWqxMo1b8oqTDC<6J2flnNAdD=#Do(d_ik64|A zrRAjt=*u?BLWtSBv=HaG5I25o+7UD63c}RMj&+)~E*lJ}M~zIyozVSH*S*TbK6^M8 z=yFn1VS|LKxwMe3+lWQDk|O##eg)3&l#VKCh@%iB?R#cXq^q?#{rGjOeRv*q&mRyj z&1%)FCpZGrGE|!>vN(^5ndUOAcy+f}6w3#aCbP@dvC{%8n2xZaFO^5S@i0Y$$R$h{ zd+LifWEgQ*h7l2ng*@o*7z45mFGNacxXd8;!}=67D@}Vog*OskT5mR2Vgy|>OG@y* z*3Ns2e&Q3-{zjgvE$e|I6{hp6A^D9zZj>2We!5HCiz1ro9z`oJ3}eAg-dx5zs8%J9 zv5V3_-j>IrC8gR&C=FyOPAY2@Et-KBwF*7_X*0V^bU z6PfqwbZ{+s?ss+iRNzu;b#eVd$pFM+it3So(FI=hW-*XX6rjM>+Nl-lTf_=Ie1~() zX5!JNsbEQIyxN$&Y@RIhnudERa3ugZVj8}Omue+&DKXYep*ER^MdpsI#zhpZBBCtb zj&Wlf>@vN{ekY)p&N7wIqiyw+Yp5ljW2ocB&9tHy)xIz)vc4=6D|6xOGG<&>D>Rw= zS++(*Xz*ei8Z{AUt*mNjiSH#Xs>XU%kVc*z)d`mBhOiYSm+l!{Z#MvKBsxlWDQ^wi z$ep?X!FW-)m>Aoak*eShv5`=8iCu}Re-*h^JGe7wXSmj4aj(bSa|3AprkB*E4*wwh zL#rbFk1$=N`!0SW{PXa>@RQ+Rgnt=Y>q`Gj_}TDt;pfALU=F`X9NE8tMSPT^An|7K zQjON%2!$%GIF>(^WufKCANOS?Qav;6q3|V~X8%=A=<|ekJ`t~4P=KfITKX1|Y{lCf z|1dnSyO$K~Nr-ExR4VIm!KJ%8x(TW4CD~ASb_`aAaK|VQZX@@1V0)@;jgIdNxwPow z$|aSTRW7Z(yz+|5Ww7-hsJznda(Pwd)s-tNuc=&x#cT(Nd}rlaZiu|j?ufj>ZQ+&I zal_LaRyoS|#|w0BuGkeiy5^AVyIbro$!Y4>3KP8rRD`Rr@(%8n6gqlWrCK>vnW@Y| z$Wz~^=I~bttoUo;uX7XEkA%M&{#N+g;qP!K*N<{5*WU|&-|lVEZJ>V^)cot=H~-W$ z`@4l(!4kc`7_I)FMycQDyFdKrNU8ES7HeaFpYOi0@}|nD-PNlArTCrS(Oo+@Y)rX z9Ifpzj3&x>?Rn_p{Cpyzvobczk=gk7Oda3XF#c)yXWS2;Xykj>Fn;~d0F5Os^nEP$ zeI59Jjn?peEcW8E_xwC|s*x#e}xq0eTOFY zjh);xKC$=BCnxsrHxuc=9QiR>R2E+mHI#g=Z$Dw984SarH#uELWVT<2O${sRfr;^b z-W-e{y1adhE!_{o`X(2YK_^&^BLRuqSmT z)6o9$Lr11hjvm=}a%y^PY@Bz#5PFX;HQucVt+|?g?utGQ-r~AOyO{lh;kQvVqA?Kl zL54Y*<)jQa;5!gDSV+QAD-6)Ii%@8dMBFqxxq#k&g701zx{i+?nm%;o06lbI623Hi zMk-18!T-5HNv4a_E)Slhb@^E?#hiLS?F-CaP`NyG9vGk4Gb&KoW7pJgWXj6P~J6LJFPM*tOs{t#7m4uV(cj`B!xJs!JDn9*HlbWarzrkzVbS(s3W0! zdh*cGILFwRO*){J|Cd-se@O`n|FJ27dCg~4}Y=;l)~lOJHrgf{-DWP1;wHX5oCqCr_4)cT zoqjWPouYDTt*YbnvrtCS*Rg@+k@n%XiYr-2`7U0HHi}=s@9+_B=u1{Fzf9*h$=i~T zA@?m5trCxN%bOJ$ELiwu)4v=YQMvEe8Jl>q)V5n7rVVoKmn!S)kW^; zK2Fu1(1>E`(`G08?LUD>t85*!vL$%3B+^`<6{&O#U(yMdC&^wb-@}+X@zO!_kS6bi z_GK!_^KCm5y@5r794*!|WvcVjdN{ry#ab@Sw?oaukEEyNdmp*hp#VjQt`8dylY3V8 zP#4M2kzF*nE@ul}1ZuOvY`{Gg-vu*y2NaGj6 zdbY$zKK898~>PiMeqk~lKr`+6+ zguWO=C%&NJvf7(N_kN_@@rlVdLq?B;ZX&emv!ps0;infCc!4h-3(iCjV0R&Av6*}%v+5_Dek9dC`d=ZCibketh(;Q!L!qL-&!1lSd~f-tty{d4{9I@rVar46bv}%5AsRm+9zIcB<2S>F!5& zFZ$N#I~OjMFZ}NC({O58i664tj)p~f@Y+%Gbh`;ouCgjsT5IR&XYt7%D&Wi;Y&Ee1 zht8?m5+{()+vqd(Cs`(&`&D5y+#KGFz@G?5!?f}L&ubUx=Vp(PYphsSwyk!@-m@zU zeiBqa>mlNgx)w=AA`pS!k>PhL%Irw(jG}&?gF`D$-FYDc=+u#pj^5WL=pOm37W0;{ zUSU)*FfGxS5XL81hKE2cqx<%WMv?ZLb4WX0UEvs{$F;IM!j`oEvH2WOcNlMZH2gkm z(=|ig@~l@Sd;~mc#AgF1)F~%_>|GdWm7J zEsVkt6|+JJl;02&D;M%=FR!jQ2%+kYp9`O78*dH+7H*qDNO^1>-hc-}8{@)Z&FA<3 zTV_3R91LbZcJfYtN<`98)VGzJD~Ch-yPJ&#hJJt8$mu19((4YD58P5{KaCE+OS_B$ zof?KLh9jrGtDrqaVZ1&ZfG$p0e8W$y5zF9l3?K&Rr4Nt41coC4`R@1NnV$|l8Lp<& zjzWk;`@5^RL%f>f2mXr7j^(rU=7_>nz7X1VbolAj{9hX?j6VvAPKS5mwEnvmKyi;9 z4LMK*RK6I#B7?VM3A6wW=S`J^m2rmA8Z6m9KDK|FwR#>+VRH0VQE;_%VY$x-lermePdX*a{C z5N`&iV$uPNet+nuH0m;enmP{Ofy3zR5;xAL$3u^*hc=cLYJ%d=g~9z~{J=JE^N2>i zdxXO@Z{=KUdN&DIlNvU2mXB=$o0TJBFjq%1+I=Gw-Q}WB63lD=4Z|(FJUd~Qwm%=zZ?3Tw^@M|UhWAWEGW@862)>L zbP-?=ht#@Fg?28TJIlXVt$7b!U6b-CN%gTY;r|7*jAdSal^CdhR=E~eJ7pmIo%2L$ah2_Zvg4CFBo zBoL6|0>|#0soDK9+Al(WX2XDmpo;xwXZKdV?osh+i|}Td?+;tnJRC>(jg7@VWRT(y zsG{Uq5u(SpA}3#JF=@lDC`976SVJuoSmKvMM;!pEiM0hPUZd{}?wOo8e&pogV^aqw zCngTtT5J%yS}tC^#z~+8-O-8ZLlZ~rWm(OhlvTqcLHAK)fcu*4r=JL41!(mjMQX9$ zCnrY_$q03CXrDSVah!&p4P7;lb>;C61I?d7d)yN)vU7IG3eOm+kNCg$swOv0P=dzO z&#jwo4j_<##09`J&62m2r6E>Pjn4hDYeF3M)4TvqO@kdJ!Zax^U%_0oz6igCKX|y? z`1u9&F&U0Y!i7yRYa1X;XNFs6EOCY>*M+yi>pGo<@p-!)Nmm1Q7j(vAAh7G$4%+Xxc!S2!&CeKXh_m7z_Im1!}#qgKH51WlcahS5nCF|0s(ERU>;I?Rk^Kz|UdJYkB7-6I9rjfS2EEf}((D+#BI5IIg z?MBvaE|j)=T>0^IWKFW%TuR)Qc%B&1p78d_PQDj<`JBbB6zSr3!k>;Z1`TAm9&+`0 ztUU)Rhv2$zjw*r22wNOVt}zxM9g>21wt?xM0m)@XG~tlw$$2~0qX89SxS5ibro0-B z^~}dY3=*}&@B*2JPOpmhicvenSL2qz?%ecD9-tEwnN31z$wX}@y%bPe~w@g;zOV`-5tCa_u0G>aJ(bhge*izjU}N#W4EG$v9pt!TI0IPA&~$Ro#KiOzi*;ex5S0)uUuK`|wF5VR zXCV(kx;pgA-{yrHc=f@san-A?UYW_b?bxJzK(bD1scLg*FuByeiF2xwz7*wfeSk&( zAck1<s7@{D+c z>br>(Y38)sX4`s2=tOrrY(Q%rrC}(8glgh9%kbJmWbc7Wpdx81{79LSp;o@ zp&*+@$pUw+_47XHbP&*1NTl-#OJS=mxdGIkycm-0!KmiCrG51=tnvlZzPGrE6ExtK z?s&-x&;EHCF}nAIVUJCYP0?qYc_lW6_6Q3$XXzj3H<8GQJW_ds?PJSC+nS3r#xeSn zMvbGe$~P2FMEoQ_17DB@w-@83mFO~U@`*4EmM<61lafkVjV#?t3u^S&b7rZrvM4hv z8}VDAr>H{7DkzL{br^>absQZ%IyT9RU3Pjk_RH}CpTHnMJsTB5p%1f`;4z(zCyK8= z7P_GeOUcwSArG#>F4lGP%5Ak%jXQaON)`DD5ee{EH=^-bdXP{*WWI&2^E*iUJpDOm zMBVjRxr8}=Ev)H3HD@lC5=@iFCnolt+&3|yxw)_7ond1nNRsA@mUS{rlc86J3Ndl8 zD3*#AQ;r=9LjiqfIFrj{h9-jvwIay9ug%(&tr6RrH5ir=I9@JzqqswYtLn7fq{e;h zO8cI>%mR+0nmEo!Lx*ju4Ng9fKH?o3caVim-48mukjynD>L(hqSr{=$l`&(NWo#Fj z;t9g;`-^@G8t-M7Ne=7B?zRSz18720Wod35@Sb9!5oDyG5q9nhn;@CVEq4uNnMQDzMXxiQ4@(*aX={*un2= za$fkRpZ`fveiHlK5V=cRz)Uw`uY6Y+h+NvsctBMY?P0BucjZMoRj{<1Igk7(t{8V> zN_M{M=xQBlZ&wy-6{M2(#tnN;K`%xhe0(x&OVS{Mu*_d=?L1Bg(b{DCj?HW!e2}j@ ztzxiyxTENxB7fQ$yeZ%Jq0W`h-Sd{Jd@=vFp- zW)B?Wlof(8d=VA#+G}=LtLwmUxt%^|CfUniJ6YmW)Pb#Xw;d|C=*o~Rug4Er1kT1a z0xp=>AaG6U+M*e@%R$j2pt7>Bju+(o#LZej?J`M!u`(XkRWZ_4c;u(AOw^GHYQF6= zm13B_q!@l0_J(S9G`aYGSyp|p!cd08N*HFEv~*z@;3kB+OsPwO$3Mc? zG&Z_-0@D_FVPo_M#>90)2K2tp>;@&%qldoy1DPHz*`BK6+x5o5bny~AIk_qx{4&pA8 z=2mj$gwBH#M*%Cgiyc!F$EFY3ASh*Qdi-8}gfnxnh*H7#)mWP6*^5{L3C8jgOk$v% z9y_WAc;kxDO?U&x$)fn)$_QU-R$v{E3U&o-9WqYALoXzy`Ks z7~!q^UVOoeDYdRH4@7D!C~UHL9fajWWEpeslH-D9q@OQXDAuu(R!|<--wziQ9L6I_ z9%go$HuoJ{7z5=pnpyoK+w~LSFNRLN6HRhTf(FY-72Br_aQe$!kv z!}|`6qIc~(x%VIrR|^ni+!u!Rt%hlvO{YQ$4#;BuXz1FrQlH}zcRoB4`u9y7qYR`X z43A9n4VZ28=+W^p8>LR*<|B=%m6@|3{j-hPvW#9|lCmQ^z52&15D&Twldzs@U8m=d zLI>)|*fdRcB0RoKY=d7$1Z9hArJO`ZlJdxM%(N_od1dc6t+N4 zDrUpESpzlxRe7=(xCr}TwJAZwtiOW`!1hRl63w}P5haLn(S>RbJV?2~#^N$MH|*jz zK2s}!7Nl{n(NR6BpLSh^v5_v5e+|K(KO#0Xn?6g^>pm_L*p(2s*%Q!1+v1!8lR@2%#*#s@>EU%$r{dEhqNnz*HlLWVDMOqhCxcxVSZhBM@6u+)wxhKM%VRMR# zX?5lQFc15nz6GGXh;L6$C&@H!=!Y!ihES}>B5dlX0b~`Zb6ZKs! zl(32MqMJsWcP+#+*90gnCn)heN9E9ggF1*vv08qul#Mj)L1QUF^UR`E#iF(Tz}pTT zZ7~NugJ{5$MS!vVT2w8^B^>?9%=zUUNDr$>alJB*UTIkCCR2^_aGNPqq!Yw0e^_zJ z2suK~*`uk@XOhxfn%CMWyAy@b!GExI_u#;yk0Es@=qh#1T|%!7uOp7*4Iq~{5@(mJ z)8C6r=y-Sw-p{w8?!ALSzB8N*@4^{%3X+<|etjCf?yPBcw*hPB!$PLvHHnN_AvWd? zDEux&&0h#V1Y`b7;V)zDe(~x9s)|v}!!B08crlNH?Bc}pgztb9!W#7|gdP+c-WuE} zJ9)Xv#6d8IYD>89z(rrtMqDy=IavPZn7TF{AsEyAtcqQVzG-OV8gwe6ilUL7OL^7m1;3#ii(Xp`Fi>F}bcd|{|9QWt_T?#vV09GXR zM1f=;Df2K3RxGjL?gS!>ptlGa%)_WCnuPSv?Q%!DT&2%9NmXimNw7gWM6O`6M6hLg`qBF$zNWmrqpzH<|9 zFQXVl#q(6$qr-BM;gmhKq>62wUQvGplm`fa_vS@timb-31dtV;pkRai$$w! z!+OD48Y$u~7_r@hiOR}S zw8aF5b@c|H2H8ZVISi8UAWNs59eYde>)fH{$ zE@V)>Q*S;tK7R7h^w?pWLJv_hIOlRxN2Jc^eWC_WOwcIDySGq=o6s*4Wl-E-8(Y9+ z8xc5N2a%8-W7y6@?N<02p-%CuKIHsv^U^(Po-i4NuZB(r76GHn6w#cM%(Mv(2@@Y% zoW&GshmbWP-YT*O45V3(=UDAt#f4>ms?uN9-u@oL%!<3msDT z(TS8;Gc|ftEQx_C;p$}QZem!U#%{p`&xLM7Yt4xGwF%H<9Y zhQ9cHhMr~NBp%QF8Pro}`BBHf+@_F$ZF|ftFNi?9-Q2=lovp7>vUQegS&XSX7uvuG z_G3FIM+TpBrf(J90mWgQK*F~#yRN>8wJPfB=TH9abP381^jfOLZj7oQwhWlB5-e~N zp;T3z!U}gtS5mYc+B?Qro+bATA(k26ZpO0N+pI1}M;ycDF7#wM5_ciF!C}BITn0#< z7%|B)*`k0gY2@^BA;+3{a6%?O)slPoVr9V&L^nr4+t>`LM7}5oS9zsQ7EJZd(E(v$ zAU@Y40*fswSWBYmswBDg5Vy+VU!|9h6sqDOUeWku*h!{|u5VR{4wiQn9*Uu{zAK z=}oDs-}mN)^K+z3tLrU!IMs_OMkD3d-lZx+GdKc*yQZc`C#S~*ngt3{ zPH~r_CCGO+Lh7ubbY(dQ5qJL+INg>+Ji=y6)AgC#k_D`dFuh;H#?a}uBX`*R>>q~C zDp%K9NHBL2oCWEWBubBL3~2rq4F03^?I^`lXq5?|u*|h=#vUDZ;6=kR|D-2&(K1q2 zYu?|R-u)p9`TQLADv!c)85}_D>Q`=#g~emBUtrGmj-?z6xH3e?Oz78j{ainEzq)A{OxE)S&~4ChtN3 zNa?sCd`>$H~ ziLHsYxD+?Nv7kbDNUpN_Qc$k+++twvYTJwAsNH^de(TFj!TzE!haWQ^_y@o_GH~T# zo~y%Tb7t;9;>*}+9w}LBk{TjgjiK$9v|{h#~Iy&RHs1xA+%w@ zZrkV~MdfTXLhxu4Awy0gOs6O~#$=$wQHSop^IPos9U>fz2IVJLi5RjD%uJ1=07M(} z^Wt0>#1mYnP4-iRdy}#(r>;F?`z9&(VPhml4t0cHizy2omLx@spUzXlOu+D*y!(pQ zSMc|xNEk90L1{$yaUwijR|%P(6?kdM@L4WEDZ8Cq2@h39u|(7a8|m<=urb4+n4+46 zA0gltDGfz96S_Z zHu1srhA_P9?yHEgV)m??{5HUHH+O|?imb#!bGm*eDh||Z$5bPn_e9v9a2_GIS>Q`@ z5U=ADJWl*s9(vsFfSZ)p;q+ou%RFSa9Ya9FQankNok4}I&oJ6Hm0m;&b=^_NP_$&a zbWmme_Bw!*DSoyPl8MG+6HIA^mxm2R+sc;-JDdHujl>I<;~IY3BFbNv2NkcH zQ=84{g|H#ZNwP{7CoSxgYm(s5zheP2s{SZZBs+sF*q(SnH1ffQe7L}xJSZ$nbOnm-?12 z9%G}PRnd;ym4VGa``n0|l!ixDDbo4*mdm$9_O5Xx_ai(INlGRM`qxYV$iE1hm=8mo=plC0orhRPGQhU>`r2KYGhDI*qstdU5XsI$v$LJ(ETlPA6Z!=1~;vNl72QOSiFQuz7 z?Xj&s)@h2qBtM-^&W1TuLdH>Z7vt)+f-c7MX@$Z&b{;WOTgGcAo0FS{B_NUwseJO^ z6MC}jCKmcqPKdI3RqE9`z-!Ajd$cmQAnkW z6TP7n8Z1u3)Sd~0qkE?h-D)|oSsL1aS!ffMHyYC|#@W#^d%a7(KLqyn+;JA>Fz3#i zbZCcTM3s9L(o$k&pO^iHHg7QA?}@>Cb2OQdRxW3BUSi?O`)f8%Bnpn#80vgKRTgQ#ch%CJ5O16 zCnJ!mdPY3a%LFOcNsjm|E4ujpiSWZ=-Lfe3$)@MlXW5l|Sjl<2 zpvuQJ>nR6*ogZyI7&fhnnw_l4v(JTniqY^iaNGWK37)+5&aQebF|4J9H_G&TB;- zV}AWnaoG;;7Iwbe(6f7p_E=uwH11&!`gN!9QYb5?a{Ra>_-|MNdKHq)^OE0B?H?7r z_$+)tYKqcbp7bjT>=FV_yM=?PHjuk?FRJKz0o4go+LK(khbcU;F-<%=in5f!PG=P? z!4Cqy{`B`Ze7D7R;^oIAp;y~U%4yC5gBs zw3Fk9##K+`-Y}H;Taq1-!`;RU%;g%maX0Etx|u`nWG6+hSapfr#o<+}v|0bw48OmI zcYuo1ENL&8V8~M&jOA(`TGXqFj6TBM3hxRQt*pyeMHWvgvmS;|m};2<7enVhbJQ}X z3mB1Se0pV{t6+N5X7VlMep2J)Gb9YVtw_PIeVo&o+ZKuTG;YRS@qUZVXlpR$n?f6O zOFx*d%^2#o7Z11aEK7Hy=Zx16-`b4#r%XA!&xnrNAQp}xkIqG`gK8l=?s^??X98PP zw{-l>BCb*%8*DXJd2ip!!~J;ON=j^WO#(&a^OlDUedsQE(Tb~i6E>pZR(Kc-4|Y!- zo4gg#=2nOciLq#}LD<$>d(^Afh5rT*$E-S6lZSd@0nx4O4c(sScfJC@Q@R1`DCYTv z(6OiPR`pe-#y}-!3m6X({ftM!v;$ zdW8!}uBOO~0V2bO<%K^MdSfcUt;!{T;kM*#S9(>F_e2&MII{MX|+S$ z{yR7|DSVs8uzg2y%_BlXu>_^+JX-AzzHT=clGMeXv})qovuu(q8$#!+Z5nRTaC^r8 z4q4%QNXRG~1v6VitWriO9<%CDdDBq%#NES1HD}sJ4t8B{J&F!*9X!fTwLn_BtIWJ}LSB!`% z#zVE-#e#U-iH=4fz{&lSqlcxK^#LTM*2*X(k|AD$qj(_nQ$z^06ant;yY`CT-*7Mt zSY@lIv62M;oYopjj+^xC1rj^A^ABPp zX64p*ReF#Jzjm(FJmWU>UnFuiY3GV87P4j<>p=D=Jj}=W_jdNsbBJ9&c|z)aR`W_h zagwMbE&NyI0Q2lZ8@|`QbM5ZmW2c=shJ_Ko0DR+LGAu7Hs0fg)CJPl(DfxD-$+x!% zLgW2SA<;d{xCt!&l(s2kH9mUl=*d0D_P%*+n)ZG!3>cZlV=VmqXc)@uF$Wup1!k&k z?3fhTn7AVh;@Hdmo=;)O>_*N}I&?;SnJcF43V5z;tP@a4&rgwO=mncpkRpYz><(Oy zMA&_@BXwkf5?e!u2JU_T8q~4v|6}hx!0f!rd*3xhquwpc#swLaU@(>p#@z-+qc-xW zcxEKqfN@5eku-Q(rnry30UL7T+>jH8i!lxtFh+p! z0qOq!@4MDl_Wow9z2$T6$-U>v!xL-I-s@Z6DsTP2|2M4Z-bLSWq8+#}P{qZ=z~tJo zv)l|=+e{8;!6z1!{TUxD_Ux1WUg>Ie zf|@N`6g6*EdLk?!wlz57v8=gTV9zH{nwcxlX2X^iP&&4wQY;i$CmHK;0O3TOokW0z z87mAsoi9r0mc934F`u}&6tHr{wX<+ZwlCNMb}Fvcg7AB0K)cy2ZM?X9EF+aj{=~zEz?wj&02- z+3z2?0Z8+}p=7MIff)LtLa;6}`AId0v}c15urYvj3bNWT>Pgo*s7bJ+73Mi(7!6HM z3=K@0Weu!vG^#oGEhTU7qug@B%oIDo9fu|dCJyTlN5WY#v=fayo9+5!Y~-b~D+!^= zcJXg#wNUe^L6{sqAfe>x68R6wg*8=-#~2qIXr}fLyWiejN1)`YVmY7TI>_A{oz^J3SSAB3RE5P-HH(i|TtaC9tV>CODjteIBAvImH- zaZlttXdBzYKEvd;L)3AYf2(@;JS6?yMpURE^5q177jhg_>p7$#er=_vN z6mbmyQPB~ux_@EfdsPjwN6eEC=N_D=!i2)R4*Krln}-Iu14gBZsc$3*#9~!*7M9ux z-ZME2Hra4d9Z~7Y*xZ4^Kp<3AiS}wK+I2p!(27ONcda^GD(AD5!SB6t%ckAeaAnC9 z?N6nHy3%~~y>R;8v8fD4JazzV81`HNNq!^{x;dyS0}aocT}Ij_=YF+k3W6lB+~h=g z&tBv1x+3P~Ka7DRONowFmi-*$HVhAz8ZZ&Y?7kJiCLu48QV#CoY3+syR<2a60LF;Q zr{A)92)#GI+&DahbHW>} zr@8iFNFIplT5Y!7I8nK;DiJspN&h|)S_@@_S)RkY1M~Yu6m&mqlnbX@t3NC?WB~QR z2X2@tG3Ll`t}fK_CD8Fd<=TN!Y_`fQ?-7F$sQ6D(vn+^4!!q-z1_lSSApaM_JQW-$ zGJ0oNNbw>0ceg%TjVfeup~jo<5I`~~L@5~i31M>3&4})TB!vb6iD#(e(?Nk6X-9D; zmvES+XJzvgKfewb$C85mJqT~Yn1Fri~VDN$>laYUZvLEqlY=x)d4eo?r)Dex?DuPbQUy*qnJ zo+DdsiB&qtmllUFzya`$a)ppSDMee8-6>3v&e05Ad66k&gFG3CQAaXq}nVc zo0s&cuJ8IidwadOwk>QXS$KA6@4RYnC-1e2H`7~r8hc0h6`b1K6=d9R)^H0&AUB8O@W*)B*SxdVIKiDaw06NCQBjKBjvckv)z0zPhWV!iU2c`$PY=t$9Xc4C6% z9Co=s=e3;k@aN`P`3g@~T7D@lD{qrQA+l!T)b1eI`>qY^xMzDq8!#B&_TJEj5x{@I zm_90NlmC2EEXOrz%fHFX-=GwMy_Uj3OHyJ|hAUtAMmUw*?O`% z>|UJ>C13mW*=xh&rjbOTpds@n1R0jhe6YH{$BA3cYJnOk30%!v1)NLqfp~jlLAj11 zXZfgA{aHnY60#{+tmI)*Jp_w4^>lV!$rIG@f^yuj%9jDbmN8G-Upp-QwJ6Vn@D9{F zWQk}Fst%-L2B2aPaoast!Vbmm7v**>E4+sOXU~IgCm(?x}!!YgPcC(Z@p^|To zZ#Z^ESY{Ly2Zv)xEqnJ}u|U(}#iboX%m*En@h_~%7hW|ZV%I$SUg`oUJ45&trBf?0 zw`(l73@XWa&B`ZWI<(8vWO76aYT!uosTG%}Xfyw|1KYx)7tN@h%@}3DJoTGld5@>V zOII4U85Gd4e9eSZ(4n-Id?)8?b%{2&M1lBG&|O6*frosIY<4Q)Vu+{P?N<~t5wj*X z3q@=_+?P68ILh`usa*gD>P&Hpy@#4D0PbM>Z}H!^hNkWh`SWL(eD9n_S6#{V4A z?#8y{y&GUo5G&|Gv6HHERi108Wc95{fw{S3;d7J5KAz_I@gbGPCpkOKT9HGuSVvrj z)6LdHRS>(pk80kBx0a1EN76e0Goqu}N4k1N-Q};sg4Ee&wtF2Zo zdb+kU%)8t7*K$>=c%@)p*~w5aW)XCU_=E@t3B4oq3{!lVKhGH#oaA&(#^xas*d3k8 zu2jT%BO#ugrg*6$_%RR|MJ{dKG4liS7diP^?M4G!OJ=$s1@%HduBnaQyyRBPs z$VbBhMW}ms_mQ?_#QE?L$FI+iH}?}3PXxMDjENwU*IRzl2w)eXDvOd)B_^j9Lu@7g zhH>S3%duXxgXRhu3L9vv`!EUs$9?0hL8F3K@7XfhIF>B?PF1m~N5_}6EOR4$l+DU0 zGyj}`D4~gAG5l?&YR~!v6j?SQz1NcSXL8HZIkFo*$2V2cT!>^{0vKxP7^b;uGg9W| zD)_cye8F&MHpd@@g{Cn*tOR^`K3E;qP4f)MM5eO0Vnr5VlUaK>3rOo;szF@4G@Y%N zcHzNb$%9_n9NF=rxrn@6YP*eKv#7e-5Uc8r)?wg9J@BbvLD#?tv=ReKizx0R!(j*b zm4$YSA|Z$Vu#q{OOyCF}BBLu&T)5DwM;kX!rLzMJbPnH7ao8vD%Ubx5Fbt}0&3T1u z!9!n#sN2C}Md;9?{3Pi8&EeY-IbzOdWrIUw!$X5{uk_CM zg?9E_`M)OuzRZ?e8~a1kl;+!PQ;?b=+anI24pCdK*#qxue}9jT!)cTi#=s@tlKBkd zP=Rl#Pzno%V$tR;1@e=2iU0&ySryvlH`&BhnZI;$XnX=b6vY+|TaLe+K+DM|R^IC` zR55^{k>QoDGgCSmI;JLu4~((d6FGi zAj6C9iZg4fm@8%T7Hdpy(SaL`)2iKyK+nSuD~Ig7LTbvaCtl;8 z9PYlCnhRNDujGI3Z^?^Hfj(8*yNyu{^CgCChrv}5(%0G+zW}x^XC4_Yun34Aw| zYjXF#Ep{#?(SF(dD324+>~RQPSY{}`j&K3tiA06yvT=#HHA+?03#V{1l-QH>TFdqK zx*27fy>h`r0CN6?%ENSJiM$cjRiSO@;6V<<%FuoYsv`bN)Hq|~H;Isse?6KP3?!&E z0#a6*d&eg^-&C~KizodO;{R>?W9yldHW%ej`D<6GdV!Wu*YBZSi?C1%(L|^%R+=xzPeBL5USel%XrA(;vKeL?gc!_l8Hk1Fxu0)=? zQ!wV=Vma8?EzR-(DzVngO_T>^b{IEpl~NIauhyU~XY@tKuiTUxUMv(u4UE5G--RSk z^8WE9+w3ET~xLp=aydyl=~{ez?Q=s7-PkgFq3m z?1(uor98ivlAj&H3YNm=!Dj%rjHOR9d2J-sUR)F%C)(|~LTjUbVbeh1FB#9r1Tl44wX1GXocxc(U zp>tDR3P1ZMK9aNb?DwL|4x`hHWO}%vDjm8WOj7^$KAnjO+FG;w;K30<1<7y90=jYz zMSr}Iywvzjk>$C~G6icz;iZ~g>EakO1prHWEw9$dob+chw?|6VhaA=XHmveXvgKyF z$qg1Tx^i#YyLWBfZD&ZTc9Hw}GS=-gHK$&h;hpnV*Ik{xdjz{}>ys^EP~{KPABMcaBI#l$Jhp4F+){WPyi%EDT4oP$SRwEt zgTw6U?%cJTAATss&7(!=^0I7P zOoU!=Zin(+iiG6C4v)`FWu2hrN5DDnjdO$%NuZ9Ng)*xvD)vM zeNg)Hmx(GC7%9%TRsAConr|ht0b8o$=Ub`k0#jlX7x;HJ2k-q1);`8JhFw`H%R=|l zn^moI1l-KPgp?Mc5}!g^y-Vy#sY%Bs5RIILh#Rv^kG<|%p}-43LJ#WLpVS4WjT$-s2T9ZUechW01u|<^bcG~A zUG>Hbi99TJSaePz+Ac7#&F*BMy7QNB8J!^29IHR?Hs3>ImQUoofh?#)D9DMS zNhMAB+1s$A#>b{%sWYAS{-uKLhtvkoLVqLsiKy_GO|c1r7!aRg9EiGlilexce?!*st|;gK#poTrW$u=< z^86HdyhkGvD~~tPRP3@W<(=T+sT97QLv~>!F4zmyuA*R<**Y37esW^mx5$rCMOlmq zCPvyIn`Y#O{o^+&=~P59WSZ2s+%>7{2o32(K)K`4_&5c|wqcx^=?san^x(ko2o*an zn3>gkK`dCG$AnP5oBViJ*WNwd7IYVXvh~jm^K;7ic7Xbp5}_8vlz6$DR8byKNUK_UrpQRR%E+F_$-W5TO*KDm-QkLn(@)f!sNe z$V8d>-JdGo@0-G^tPEiDWJC}1j7N>ot#1z*&&uDu!UXYbf1RS;wb^I1a5ykIY#C5_ zB{olKXjSQpo^P{vneyuQ^2}aXwE2sFx&-9&Y5Hx1dS&t4;+L+2R(9C|Z)p>6Ja0u- zTDC;ecUqqF!ZIgejcUl3EQcYOR#HWC?!34`d8)6AZk&XVAC)9dA0^gwv)Yv0AIp|w zf&js-Cd!=(R~K;9#hG7?8e3?<)ZR|>jl8GU%81;sLt+&}981b6J?pdCuK6-dxpi6i zGEpe2h;a76s)BtH*8R(3U{VD>VuKMFM%BHdSrXhud!t%Hn< zc>fJ%zN>G$%mUGS`!v+K{W{{C3f(wo(+`ZBGBGyg6h`ITat;B6sVO{xQ>zxczPIw} zif)QB_Hgc)Q_3cs5$12*+qvMS?lu&I1)eTlg9bMDq zdC7BD*6iiXR?JM3_uc)SJ-K%$A-5Wj$&uIN5r4M4fceRcl6mB&#@$m_&gqP}vxGZx z>XpJ9VnP-Yfqn^D=ne}Ms1As@U05=jvT(#h*pKhiV5PRd)h5u>{OJd&sg_(8yq`qYnJ}~1MD?Wffdd19OSzfKBfbz$D!mQC9$CiBdNJ2S;IqiK z#5*WLc?EBX<3<^*>5UkLS9jUF0KK?sLQbjl08hrCaXbZ}w%G&Qb|$rjyj!WmkUW|6 zW~yVQ;w<@5mU+gmYb8&)Kk`VMa4FG;Kg;gUo1qVncDqK-<(>HDw0dTmd>6;pxnQXT ziHI6zc%;O%hBY^mec->Co zX99=zLZES1_(!a`E|l}(@tKi9U13iD{b6lI#9P|mZj1ZKS>!&EN@vzY7XoIH2dX8s zY(kp1(y(IXF@Ik^dC{`E4hz#-$@7IQ1pYqoE;)C$5(N|$cW<_KL_#!6+SA`2N{7l8 zFcqAZdj zM6o(|?dul9`JG{v{D{tqt}X@Hn3Yu6Y6t+LqKfu0cLSaMWI3Ab4PrIH!C2bg+r39& zTtT6Ses~cRO{~yGX7vM!(5KfC?5R!RA5oC8B zr$UNU7S3Efn2S*OobU185^k={nV?!|%bBLIiu+58YlBOdz$iuXbSGeV;lTTtW1E3L zDCFk2a3PT0_Msp3wo%IlE(c^QiScn`3sujRPm>J3AAV(py?-tigKedU!4^BYq2(U{ z{nWIlYfH#*uUQ@(LcOx!{}GlZ!%;?;`+|!NM4Uo_f)QKL(=g^VjjCg6ZzI)X>n;Cg zsoTXdqsxT8Q@~mA&;P7o+sNi%F1!t;UamFzq|EMS^y-ZFwi;@!#~@2w8okN_rPa#J zX6M}J5!^++TlVbk?Z2KxBnw3tcbWxaZaEygf?^=UMC1^%9EmlHM_Zy4sv+^2oo*|3 za8e|tznuA~r^c%2M_tFTSZoHv`(9R-Chp|g_SNwh%qd3e8+h09gw;R=t6~^c-J}+5 z>g?N+ZO)=i;1RC39vgP#>Z$Sz?QmPeQiM2c&tzJaYRft$B-emx(pA^vJ%Zv9u-?)O6%!vFDHU2(U`gt0$m*;8YNO_&eTqntMP++N_UI~V)_^)I> zU-{A;$(~}11K)IPB3E$p4*;+zT1(qC{ir9AP&*S~?u8QNXn3)># z@im4cd6|BR?$kkz(j8ADF>KyPt&$35?B4H(UOU#bTe}%nu=bdsU|0S8zWv( z7s~_x341lUr8uSd$v^?>13)!|uO&~K$&pf!)vNpPx%v{HXiDp^u#n1#0O`Q5*4Ggu z)ds2R(FRK$+?RJOB6R8!ztH-xk_ux|9Ru@h({j5-z2$RXDwinX2s3U&<&}656wNe( zY09D&E=6adE-ptf7TmNyi+)pTP}Q_cy01XiRZ06;Uya+Yq!<(Xd|iX01sG;P^9Ch7 zKOd^#X|CpC=Uox9)pW{TTubv`&`X>uWT1ZJD#qaj=$9h6Zs9DjR6Bz*q5M;0nQKIG~z$VAsRyQnP%uYoe=NC2Mr`Pqu<3#c>O z%L2`VA|kNE$@R#99`^c+^iifwSPoY?k~C6b7<|*h-HycyeActbjI}h8Nl6e+G9Yz# z6^#NbGLp+MjwZ9PfYwg@P^^3&J+R^C9~d2sn2}cC1Aroo#v)3>f1%9Jw{NGL*0x2e zj;y3m?3frpbaPffDYL>B?ZYFe&7IY>KCI|vumF_sG`64w!;iu;wGYiBzBca?&e?XO z4lzD&VtD$1N)6j$BcNxm@4LFYziT@HA4*Bq56rCRJd;{7sx|$87e?8Ct%l{B|wqd=}cm0!lD-A*cZz9xpGZ$E%Z1`@zu871dcp zULId~d?}Xor1jJF_6snabm$as+sP=Pm1=r`6u4tb%?oSVX~OnaF3Ydsqg~>{x^Pg+ z^tJP`+%T9WNctp$QyHKMqN+Y5%V?av{}x54iBYR$1A*1XMKLj;z$C&Ixk@2M*IMS}FZ<}qV zoOMMXQJ+{NIn?F+u9?4iSb#75Q^>m0%+jW$zO@Bc=Ab%L?TbX^SqZuL8`g6DHxjtI zi_leXsZzflmO&VFa(G~5AHo8Ec_wY4>tiw?b2`LSZ{k{k~hyHE>;ek2y8v zJd&FZ^P^Oq#bw|5k;q=it|0~LFk!0af2gX!o<*&02iz99eC8m4uScO(vH^J~ zD<(j?aCl05b1wo~<&`@ixMZ+S4;x&7(KXFZ7eE4e}ZtmN!qS%}~BI&$_?d0`dJ zgn5xloxLg|v>zjnlYylBDDd4#^!pgKL40ZjsT<{m3gLemcsMUa zRT3v*neFQj5-bODJS`@Lp~;PkL$+GlzheqHxzW)ADqCDVi7dHsNOd(4C}qR9@`Eqp z)_~D~2c!o@KeEwb8S~-V9G&BKenFg&DYHa2I#a;ZqtCIOuoWZCwxGnj5YeST_Z z@-=nA0|%)(j|v)n-ehY8Kx$m<-c?$Q!>F?nDkX%(wl@@${qsp{F5|Cg*X_n8Xfpu= zj;AAQMbgb?)XsdYU2IrmVs9J9#lXnUXm-aH>ZJntBw}zAwSQ$t-fuf%Q8$~_ZDB3X zwV>H#vblSP4o=(DKS1`Y9)uzcudNF}F-oIPFNJo*6$J2Rdh`|X3ay9P>E+xNKZ_p^K} z`KEM?!k#kfZI1VaCBXUzCWcg@W&;qNL^|WG+5JS>5|NT zOwTwzOn^lD=ug5)S_Se829z}>lqo;C0+)nUobkP5rniR%JE_@?&s@moyD)I=tN)d$ zBIon^{k)akRdEe08klkp2)!v}ZWsVczQl`ei*_0*nga*$hSxviSsNu=9^kwVO>fV+ zIqY`m>i#h-ZR3aRpcH$)Yjbi_)Q&+L-9TPVJFAt7BIem-HiKd4GR8b(TTJ_8Dc5}b zCVToL&=d|$t6(Y~0cb#g-1ZiPmtOA-fXAsrj6-|#R!IE@>Gj(BR9AgF&^OiA?*wbR zkoooi%8v*3-{d16q-L3wvUfY3@zvAR$z3)8gWnG3NY>>SMd^u*c><-VXG3px5jvvN z`qXWgez1{!wQL6<`mv9M(6hCMrpJY)g-h(CXNASQukim-$etBBDypf#AIkWai=+cb zP420>VgvjXTkRTbCwLEx)Yv4km~5Tzqrhyc>+sCj4LSisgPH+6mnY+%SiM-1T{8OZ zZ!iKDrJmHrqPR9YV*j&W3$JN88}TC9vsqaLIS5$R_P_^BlI9A)w|^cY#}=OgW5#nz zKZR38!zyNkOCf^lBo*!CtGm(3eL%JMQFHP_3Um%qapGiysxx^zW%^!eqJ9kJKEip+ zXK(E-!W8vW^IAYJ875|7or15+g}%}rHhsF--ZVUY*f#1uugB^cAD_@crP1XI-^+xL zj>l=Oim}ggya0br*gx&jMeM&;9#$2*S?8m~cePw)XKxR+h|`;Zzj#}OI4Kz=TSvyn zC+(O#!xp72oQmGwXDe1LO^qui6Yw8RIYa+6%guSsI@M(SG9*7F)8Av z4`+4-=S;0;Dd&w1r;1HxFO&e79yhMDI4RgH1#Uu6^bUwx+4gpRB)I%RG~p$v%ovbt z{XkegKIT2)%=xf^gzY~Mq3a<>=i1zOzKK8?SGLc$bPw8;G0(Ub+a||nIA10{-Vu&a ze~rLaTQi#h+e0{?;Qmi&(K{ok@#_KTy{0-Bm7>#r5v6T__W z5G;zC?IJto|EJWSL0kPcMTR2spH6Vs( zeEfB}3E!G4y=Zu9H@1#$FK_bQum~fkq;{ArG73t=IFt8bk_-LqM<^Q%R9n~{WT{+}e zk5q&mY8`0>^;6fZ(_5UkO#KQeVP}=ZOb|7xEM`6Lt6?SYo;?dPzWBz{&qsL}QIE+U z&hccL!@8EWVU;avZ%(vlKUy-&(SF2?%Mu>Pj^!u9$vnHi7ONBgwuT9J)c^x+yFLII zb!K?PCBuCov(TOqmv}zL$r8(aWH;d01~bPwe-6H|Z#p02g(5c%OJ>HBo{uL>`@PuU zWvV2%J43e~=2WP^wXd#1M|<_{b)^DK*Q%~ZVNqbuS>u&bB5>~GjI^g=m4bK(}MWh8$!duG&f;386$};^+V?C`YBA#u)S9s{__M! zX92^pH}=^o4wRE2c?77FBAMOjR>`WbveB{)x0@D<=haU!hhn+Wh|NyZd~(4m%Qb=Y z-2-;&3f7+-8gT*i^Vqx0(TReZ&s$k_NLG1Eb6MQAGna*r3ULdg6?Lme-iE#>OZ|Sd z{rALyfzG#kTF?WU%b$kTj8mc>OsBa6Biup_2QW$fwCWcm;Ks+cLndKox6crcGef%% z+H$^^V7S`|+@`kv;Y!Tl){giv8q=FxKh$iVbp0lwIn%yDHXJ3?&^F4aBRc#a2uY zwKK)8G0LdftRBF({lUGQro)?S34P<~VS&d0qR3s2i71CyD%iGgsR=vP_ozqvT~^_F zFAK2@p0uT-17x71^`y6&hnuGU7`r*UCQ2vAttERD$ajZTgUKZvaxOSCe;*;tW2k4F z^i^cf6sN#}l(e+PQVq4=!7jSq+jny-Qx^1k3nE09!GD?`k7`dZuG<+i(r%^ zR2Nz=IAT4D)+b4l?lMOd8m0K)XPtMRov!~*7J7W*mZjW$t|x?GBu8E?(kg z+Nj1R>V9`B;inoaQ}_96WVA8G^!0cNEEws`AC}d&k6}f}n3%jpS4Z*@4kpfFucVgc z>+K-4hL_=_S^Qgsl?t5Mes!??4~1n&uj~hQ5Vez%pb|(hctx4!Ww=Ic7*38cflP+j zJl*f#PL*wfDOn7A<3%>Hl~dH**3VzI0fxZyZ2EUIOH4igR-F6olyfXY9z-~SEJwz> zFRal8D2$g`z(258H6(85vOSA^| zUA5#u)i@oL7ZofN|5?3bM(>osqNo4F_Ya3%jsfu4P)2EC)ySJ7SG zX7&XIA)%wFUx=0QRM@$m8NQFz;*5!BB5R)pi<;Wfa?S^*u1?|1Bjw8^Rt;UIQ@BiW zqdP~be{nNX9Fy2vkOXR{Ho-&h8$c150vh%j^Dv^59$6N1M_0`ZO}h8q7WJ*-Y0=O2 z6PN_fGorvb2J%bxgPjcAUg>AcswNH109zctX$MX1!qlj1zz*ydr*DftE?wi~H|rXk zRJL%cr>1!GcC&BbfU!V~yQ^4X3S--)@Y%|si+N0~7O%WQ#opX3m8RKa*E464?I&ON z*!kv+u-(`LQ}N8jqo#RCbZ)ga+O~|UxfeOBSZx*PxEycfI(S`HkH!#Gx@J?ll{Ds3 z%uAW8(gY9(6QcKu*I!Pxo|T>JbZSNLrnDfspni55c_#n@m4|75=|h z?RdEXe=kvf;n5$$T=z((RGr$*l&PPbT`H$&iHU0MO;j?r6Q~uoFe$_+z*ggo^n^9^ z7a1N=)Dr?d<;Y+pvVEpfl7-8I+0Tq?Jwzy52QMbWVTZLxKoQT&r<;Fm>E>%76Ii*` zj>yWYoSlr-ZrstInMCa=LUQ8p+TR^nb10i4l`4FgY0L9<%uUhiiYv&&q0GXnlEhC% zo}*xDeL?>6pdAw=XgosL$Xsmx@Zy3<&=4v&@mz%xy7~s}LN*Jz?ZXG`#bGR9vkwx( zQz-CWV@TC}%!}zkV7ja~h#T|q+i1UBWLBsyhm&Yu8ZO6XQ*4wb#6^>XKqJwv+W_R0f_CA#^7*G?SBmYH=9L5qYvi<1wVL7Il-oSB;b`Q#T@0!xxTdeFJ-AXf) zNE*s3gzb4!YfrFD3oaQemfa?I_)wQ&HD^QNUALor^;k@l7vJ}MkPS88{LqUa#D(^~ zMmU;<8 zoX$MF0cgeJI13*Qr}7QF;Mx8xv$vBr9aC9|UJ>|ZZj6G0qbG;?wGS#G>UrcXVhfov z_r;ktZwHtO6$PtncCOBs{m>}QP@*c{B!17EAX^_zPssteV6Sep2(W4#hiLhgi#2>;(csq>!y_wbBe|| z*hcP%ukcD+;Z6k23yJS2EEoNe@b7ZmiFfvRqEwQauEDmxT*yh+2_^@g9Km}RMj(eG zxUa#_^XP>l7mB`mk0LPv3#g$u(MId1@oeI%J=SxG{7O{aLxah?XUE#0%)GUQ&X;H* z81HmIy!yrFa-U1@^pQ64=Xs}PQH#o1@3a+C98(^b_dShk!Yt{b#9`XpqvqST=z02IUvPMhX0?N=7tptZIAS(iVlVSC}kMX}m zASQ3*fAHp9*x4zeUyyz}Ne`R6DnKgr;g^%i=~7$vs16B2fIo5$?AT(H#n6X6QeK@H4x>C* zWTiI$DXs9w)P*_uw0jQSVa2cq%?vIk_$Ozs6+wQX8O+HuNy0h)`Cf%5W+q3x0ccz& z*|In@z7j66JWmXh2^}TC@eooRxJ98%3mVR^>9s59b1p8J#%j#0OEWVoH?hjb6-@$@ZCSTF+_ZMpj zN*+HLP`+a(uf|`C$WZ4bLGb=B%dP3sC?5SIGHTv`E>=HSJcGpu^x@p3eu90|RjyAlez>?P-_PJ~KQ42Q8W9cIGK z@KP9Gtlw(KBa!uD-KX8%U>WWVr;SE6&nQWHO!XZWgzj0a9Oz5bEU^a6$QbEGUq`a@(de&?&A5YTC#u63yFE)xYgN0B z1m(@FOdv@wwzEU_fY}FR6YNmx5P-<{G>o4)TN))hJqc5aIBF7i;>u6$o=7K_{jk86 zRm9kGW0-JCdIxS2UfG5IqjJ3VSP``S?!6GFjnA+}eynwOmYG?r_}#gMG`tYG-@vNy z-lKT`x@w-@(7BUglX88&K+(ufQF{cKy+%1S>8~L@q=c*;c9-{392c9*Z6CVHE&Rg* zuGDEf@GsrCCe29U7DpjX1-l2!TA2Z##tN3dSjpnwQzeVmCTT?1MzT@u))k1;{T$GmKo2qb{Pq_P;8ZPTZXW*Mj16tG6Y9Bsir~3&$pDDW2}VbY(yC56e`!N zVFH^uQ3^>c!Q7R=`3B-W zc2tOV=s*aB8Uwe!^-B(`$G15lcB$?Qt2tmm@`^}8O>=f6p~_JT>!p|$*S>$;R#Fe= z=AWEF2w2LY$q7_ANqcQHJ~b0_iX8j$4`H<#>&sZN;+Hri$;Ptw&v6?zBhYnv^Pt!~ zj|tROcS#6Kl%j2NUWTZ|-;3k6U$usc@u4r1Zf8Gl3-e9$+4Dp?w*+%*t@Sy^?X>fv z0HW^A0!sxd9t3qSnwel5e=kL<+ya{31nybdF$jb&dkUyTZgkc4>1H=<$>XGc(*AK>WnVmj z$yIi(vx7pMGHEV*sMN@PZike%m=q3>CKDF>8k zH>pDL`GfO90?Yy6|)Wb2Vo&*w|S(taL1Sth)wM9R%gSGo6N{MXC$V?FS5b`3sO-CgG z_fGN55_es#lE=6=Z%YU`S_^(zWGy6^&Bb<@AE1VLl4M_8BqddnccOLnlm?Dn zyag_J7F(oRAi{51qB-#dQWksy?a(KBNe|)Jxn49r)@uu9 z&+kjdkMW!obh3BH@xnCO?b{7`w~x4-?DQ9rES(@GJBhu1W4HxdU3R*ISv_JWFucdy z1i4v*W`Ax=m*RJh5Masnh-1bk(H-FW85k7dM7*Q2klo8ECdYMTxWD{O2ar3gUvvBx zPtEK{5a?J);m}xo<4+x4sK7pQ7 zg@kTh5~}MsMKUo=3pi z3d^i&MHO31bC)u`w&kCp*`A{0y<#i{ZJx!qkN!P8O?E!hVdPDIKwu?Sj;8##aO8qR z)rt;X8@qsZ6z195%Hh74>I(yRS}PZu1B6j5p~sV`TG5dlS8b$J$$dr}L3a#W6EfVa zh^&W%9uQ_ifg8_`scKM2J6X7b3cnBI<8!2){Q^9I*4HHvvULT$sTA1tN(RC-ErXbC zGn1+d(19yt8?Z@Rz?-qDCRH3Gri)2(FJD|?SM5Z& zv)Ij@&_Cf~N3gqTndkN;T@bK=+uz z)j1MViF|UJ1N38YMJ%=@Mxw-KNnXVcO7VhM_fS&2J}W}=Lzh0{?Axs+dRh=}K2u$F zU8xzC%c}o zvy?CIC(yMoTpg|n*M{d&Y@lASFAOR;7zq0be+>d}RtQWG=NE+=!UzQjDrk|4owA_V zjo~H&W48c+{w2a=zY<;&UP{Q;!(^{O?)-ZA4V3V!tXSbSR<7{6$EX|m8)TFiNK%r` zRrbF{81&a;(L!oO|GfzLJ>o$)_hUdsskLTazOagz!5Wis4!wT5NjfMf0R8`c2kJU1U98N_k{>Rk6u@d!mKWH=Q{(beTb>jw#v+ZPSuMeg%5&RylhuX;#j@H9V@EYR zLT%U&O4IB3m_w;lw`O{0Se)DRlDzF!Hn0wVb>TsBW4+rp8H)No^Z!c0Vt>&z&u2zU zd0}{R%hDidQFkQGkD5~wd!wyO>{M+^8rWTW(Fmk{)WMowQti2&TxK)DR^AbFm7~Ns zaw6?Bq1E8a+Ks-o7j{o>5q3PT5vW`}y+>xcIbJypvMs_xECLGL6O<13cp{*FY4)xG z_r7?E2)}s;G-5Dr#6laLif^=BWbd_a=&)e_alsu%FA~Kf^iW%`c+5HrzMIBO`_2^6 zAsu6Q3jPXQ`rjj{ZVbzq>;;gdj>rb{G|fEmH9*v?iTU|FtY`WjXEih170?$8QVRKN z&-Kb~qpvbHsqH4ki!zPkFC<7_8lPmim!2t!@`y2uh*zY`S`5<67b#qpFor8rg?`#K z1s{L~^x2{GG(sD6=){^P$>y^jKTH{aqxF!j2AL6mm$XP$C*6Tb1QKU;vE$d06f;LX zoiv>h5h*zOQn-T&RN1Y1O;+u6Q|lafev$b_YiyHrxdf|_Gx|Q$Yyv6#yXmASaM7ak z8IQ2L5({~lif=C9TTg5`$J|rhJ7ug37)P0K-!rMO=@yTg@w-+F%qx9R6D!oYak{{* ziWb_8yRy6U%y@T>!q19YN#1`vMyr7X&%cR`;gDTrj9|u>otVNo@eZvc%CmHA=%!5h z*wtczE;GrkQq_3e?4**KJVeLN%|rWV+&!cbs|2biOmyLBS|R!c{;u9`aW<>MW#RM) zSv8Ni2Dd8f`$!OJU<&e<^j#ZPky7bv>=4I%Svt(Zm8glSDxVa8FDPY0!1P$K37ahj ziM6V$_}@B{qT1yAH&C)9SxP`yK^518StOm`dEDJ$rML66FX5!p6^`%vLTUV^%;!v= zu!Ezd(Gyx}JJ_4jP1I^n@MU?1s_5N-zLQV*zrI!Y1*{zvq$+7HiSP&jsIxhu4m8@- zvL(05>{_}s@=!<{Z!C9uu@0_hG$fMdvkY0rnKFV!)Xor4Re0SF-(nO@?$6^e)#6a3 zosK{ThQm66#bku=cFq+W5dn$9@*+d(l4ILfAS5-F5J9jmth9}a_iGa^KEc)r8r?hO z7}8ELRhdTSp%03vs0R-xQW{2eptl5x>simNh6@3wB%Zi&B-8IRoui!8B#x7(hINr1 zw)5u@Jy)klIVQD)NhwCB^P55`s$ZuD2_ad|q-mTtiAJ8Xh-6nLa6&g3HYvDRv8F57 zZONY+@S&bb6alI2_Kh*%M(H70F1H-vlP<2UiLkhm&^zaN)JZ9T1bv*f6!Wo zo%<@$UVY1OnAh5Ft46d6hdG3i4>Fti6tS3+#mV%tZKHZGKw7tZOhi3IaJ8B3@s4g6 zQBDDQsK5Ojhs&Y*I$(ksmZ6ya=^B}sz1s@J*HX!nZhi8|#4e`em`;V~?DV>Z@FGAO z^WhFz;d9y-=JuG*fP}<4EHa@5wW7}?E^%m#-(j9b$`E@Sz9w06x9Kb0AnG||{B6Af zb372ih!DwxQhTA90?IU>(Q+p0eqGC1El+Auhj4dS zQ+nGOPI4rSUjNtgss)L>Rw4pl3kzcjnxB2oNBFH$FbYhh@dMf_JZy;qPZI6P!5!{d zy{mLZeRa%*2VYQGVYfl z$g{MD`5MAV=wx1rc_X;o-7RZdwj@JGr$)8W&bcF#QRa&Ur&xOIYqg9y>6c=%{c8c)Jy< z<`|qDNSH`J59^d!umosVF=XkILe6v!tMu8fC0Mk|tKhri{ZLMWNuR@{h0#(+YL#)z z8gW`W4;$qHqZ=?n6cBou8NII|q@&=${jST*ek+|;UP!jd8m7<$@_9enJ+$dLt`GYkI^~# zH}eHXEC3JX`xiVfJZ>z?Oh)CgT(<2cCcZLaxGa?VN;~9UR;ee`!HhR72AQ-|cOb!E zJnY4EKo&`sDUMoHR3!r4Mhk3`O6QWdQNv<-i2t%`fz2!s{%F*3$-|A7pX_X=E zi-A);`)xEUAbm7FlC<^`4(}q6TGL**V)O36a93QtK7^$8gP@o#*gi1jIi+~{1&xo- z%R;?8?_+kHHk0acf#?hKF~YxEEngU0h&FJP3rTFs15@7Ds&QN8ZBjDtuO z<`6cpiRW`}7LHHInRh!}#Bnf7?4Lvi9w051{85+6t2iqPKO1T#4?uG7tP-u{t;_FO zi_^D@F#eBFqYI$67Qvae{;6j68kB0#(<~fV1)vldR&o;Y>^SY7(iIH0z zZjf}KGLlnfPs9qReJ#(Uw=-{GSvz+~UXFWmcwiDL1%DMq$c5dXOyD!7b*Ck@c21Zx zZ{O3LdUSTCxX)71H83(_^?&vjQkW70>#%1! zO*Camq_`SS!&pKzmkJ$F0ufnq63eOt*ri;{=UbBdx4GZ%)K?dgJ38Xj5f6zIiO88lvV~xe4`zk zXv=$`UzYrG400yRp7)vg#M(Y0S6TO6=iD|y*t%s_xt<6?Gh7l=@T8uM36pN_urJ0` ztHN=Eu>$mJqpr45)x_Z(Cep)gIKXid3`PJLDICGFF7~rh;(ym!nXISQay)}f?Oa+( zrB1+9n0T>w%sJb>qDrws>?Uub7k(QF$t z-=Zo1Jpxh`OCij00AJny+Kwvz3UO6%6HKEV>C!Yw6jRzjsL__0ji>28bgrByQUromFSxE|{7aJ`{NeTP;hr&Y zZWAgVo5~~7DV_fB#HxgUQ~CkwV^fyb4%}p;cbh@Gb>KiAaKEsHiZvFydyIY*1uzOU zIxNiQac7{mUlTCpi@Q*tDO1V2e%ADRF@)M4w#U%va)Z?GM6hIdj#leJA=#0;G-ud# zT^F8Wr+gEz1mXSkez&11#j*y6CY<{}<;)B6rE{-V7&t&^W%<5F3gfzb!N}0qA;lF~ zGP(GU%}c4hf{~+*y2lKMn45JNmwuP~@X*VO{f=dXW5qPN9}o{l@l|iZyUy{~+%E2c zY%SSXSsj2MftSGcy-H!Uh%?QR^cyXoQCEed_xXxtt&8E&Jln~iPcssPOaXedrsf;k zvz!4TY78a0WPb@8>{1lE;OX%m0n#!(>`?)oyHhOHpb(!-Wzp3uF5nOnfzaNEpX2q; z54E(mbg)m(F6rbKyba(yjj z`GBpsTiJdTat-UEQgDX5TApJZVgjMdgiFQP+Bz6@_|7udLc4W2BW= zVw)T#Of>daNQRvkkF;GOZoqQGIHp`Zg#?G-ZzI)1ZN=>>y|wO7%tjifV}{jzV99qW6f1TwM|A5CZK4B(!!M$iF7Ax8E1vAE7=tbL5^6nk9iP6dN zfzqLO4cpeTAuIRrD}_nU0aE_%#y_!!D?5U%f>-fqP|?3Y*N z>Y3>b6;G=p38)Fcj*Ty;f&2}Wb&x40#vVZLY~Zj#luA*yb{{ zqehv_S#-}wB00x_T@q!*e9p>Rq8Sz9RBMj=r-+6s?p&_h(>tVsxm*}YwcL^Vku&EP z!&7{UB-bm*u+%FEe4+$`s&qyDa+~4M3TBz9WaFdK*PWbPo|1T196IywfYt@)e+ty z;D#ZmWMvsdX0sISa;{Z8T#Qi2Ik3DpQ_g{93|N33ydRvF=`xG7WQi-^6hZ5AKNXI!gJZL9e)u zf3>WgM!CvvYV>7DAB(WoZyA&}VPPalictZlN76N8$%}QD40N*vN%Cvgii_}?+%h}Q z-sUH!3{Bnk4&hNIGiQNaM%BGtjNN)yOg?&PvuJ-mPmHFdt3FzI$xD$aM4v(Gp5{mJ9#3pl+@-l&c>Aw+9kqgxt(t z^PeMQs$TC~cI5Vs4gccIkh=TW8%eFlkbGv<({4}KnI;@5=$(kNxGl*9yfDgj)zwo~&Vl$F|n2KKD`e&Pv z_9?IGo4za@!U$PrrQ<0YtiP-wNm|6s50D4Qvj8s*ivRx>4_5R)y~z1dQ;Xyz0ah=J zpu3+KcqW+@&+sKPur0IFk+wdFey0AK#gRPQ=Pi6~edWV?hmr+{F@%C#LvO~Q5AkiQRMBPJV$vNcZ{wp6#+{-saw(xme zqkl#QEpUv(}2 zN@!YHcw%c;wj|;9zKWLUrQUtneppt92F7v&X=P>_ogJQvS@a7Cj8V4jwc+bL=M-WG z9`D|R&20Dd`(gRP$)TYa#{{RRB))0OD0ib+>~uQO7BuAd_jF}@N<2Tg=$0P|K zHJpwUBOgCsnu@~n5UkFM3A#7p1>r!J{7#v z;z^%tJr=v)j(i#)6}`Xh0ntL9Su}W#dc!%;9$uhr{XaP0pH>C1MPn>jtA=uZfs|Qs zOCxbSdvSG9JlQLP?Cr4tSJph0J3`ditck*UDb%2BmAaG8KR7Zo<;MkFx~8grgUD+9 zH-N_y>N$c(ZwX2e^FOAm{jnV^T|p+w^P?0ny2KaSG5|LRyEKZe7~9)+tIWzpbW{cQ zy{od{oo{ci+q^>XdQe7Bw-}2XKPJ;8qm`?A2gzy2X@4I_=?F492}>oP)h{kh#=Vbr z(Qe}#>@kx$50jdXw$u3fuwZEHfI_i)84nS9ijYVb+=qPlasvqQ;f=$P&z53`I%U!0 z(u%Ff#OL`@eE!r{I*W$zGV^(fe-01C2=caYhU645`k|pjjUZW1Z|ITiSco8DA<*T5 z&mWOLg1SdJY6?o!AkusZiu+ahy6((E=SYOblDd9YH22g;mwCx^MKf`(bOOD?Oq=dU zNM)0oTdpPHGPM@f~BfII6R%L-BB^_Jq7 zW|QqytcsR`&&8pASxIJ#!f7vRqHr#em4Q|NPPG;%^joen1&ju(B83u5QcvO5FNi!)-@MiKp`-7WVY_uYIxhQ_IOa{!oC-Js8{bvOO7N6E(n2rpSCQ$!KrUS%hQ7|naRM2g}xy(_wv0BYXmkE_IrP_Zm#FAUXAt6h88j^tde`^8__D zr&V&9^dV6azUftqv3N`?*J`d=J$I6Zy;&;42`2g^shsLn7yoURQmL^mirYj?M^%k} z`|UBRF)%+^nPU^!<+>ZmZAF#tLBps(m~3c{vY)d2u)l!f=V=vlD_PO36(&J8Gl=5s zQt8D*4kG}4`}l1#eBj=)WM`z8VwS5(sHXz47ovHU&-@~Bwxfpq_81rC$Kpa1TCy@P zm~nCx*X#41wDdTv1E_rQHBs%ISnljFv$!k5(xQ!{tEkpyxLju0L>Ll)1l!L@g;9vQ zMqW#dR(K|(gT+_x3{T=gSP1oj#+scI+a}*D!>ek(b5?mQQ#;Bh)O_uXe5l#JqLK2G z6a!oJBMIJHv`M7tm9*|MoxPoYvIAL*XO~`vGv!x>Klq}{qA$aC)8~}iaYFLeLT)^) zkna|)d226a2fBmEsaS|SHJ{^F`3+cB$we74$+L_mi@G-m)Q56}a|#5NmEuNTgfwEz(Gqa13c5Leh!V!{PD-Ev8j}F|>56H*EqDyfCC0~>-yM$1| zbzHB@Vz>bN`evdm4h5u4lN)$1sH-Vpz{FSxq7q9uIBcbWiqV?)R$K<=eII2#Ds^Ih zPvJ?*v!oo0jANB!q^^{2E3`oTdWr2!AOX>Jo`+Ma&M6mCb9$Z0<>Y`^OBwCze8Uz9 zS^ixjM^6D+C9}6L;ysuU9mqw>Ef6ua5Vq={4JWAva*(J9#E+bm!|A4BW^g{bYM}UH z5Ah4`4X||xcrljUj9X++xm}X(F9rb^N_K?re%_**rJR61r@4W(*foloLW0TvBxz}A zLLHw^Djzm5=+h^R%Mxc`^+MtAE2%zno{=n0`y{9))Ue=Rqs#aoR>tQ@{Di}Q2y0JF zxWeIkAG~E2eLI_l-$p$AI&+@#C`Rg6q<%6w)`h;O{=#22XTbEg_UN&ik*?xZ;oHm@ z@O_Z4SSTT?(R8%sJ;(^L0D)ZhsO?2quO3#?1qRnIiXE&a1%^{~QVO=2UPs!RNtZ*> z&NsV0Q&daPh~80N)dk%J;C2+WegSf4L#oOSM-EKWA^3>_xiURv4K4Xt^p8d>;NkrH z@L^PJlja)dXb3AS=|UJB{ZM%B`o62X`@6PZ-`}~ZXUqD5ne_+8N7s)61R0olvHrg$ z>ZY>)TAzDGmTT1!d&rK_X0O7}q>|3|E6ga&_roRu0?!V-^0kF>1hv$OK$&P7DcEv* zSZJCwdhg`8kpjiWyDx&Nq?Vic%(imCK22e;yHljRbr`46kN^mXD9o5GDE$Lxp|;k|=$u7#wuS zR8*95N#bFRUAeVVZ?#*c)0y5(3^8~7R z)GxJ2#uUYe;xKfY#<|N*i&+EDb0DAJRS!*2fyEdx?xtzudNIMmnx+I{QBjpU49O`a zQ&t0V+b^=)0|OJoK=Bp7ln7soA*=-R{npjYQ3ryEdAro7o0h&JCVgcPFPRv}pvl>r zF=yen?AoBXnwu!MVCC3&F zIYL0^RY@=z9~XwpsV)~hG9EUs=`aa6pXbj^m_zns+uuHGaBSC0Yf284MUKZV+GU{F zw$f?R?nIjvCH4ektk;V@$MPlOd=mqd^FK*@s31>lc=aqpYDp`GA@@JO1pSNXHi4WwuVprv^;YseEEgW!b=GIG0UpWxTpCe)QkkN3}=bY6R zszx)_$YO~u9S_UAx#;Q$AgQqeE0G^*!kyaI?HEwVE! zx^kJz+c41If;85)Cfl1Yoq_65tWmw;rCGg^w0?9^3_|ONfRc>-WHD#Op_^Bc-m!>x zZ0g90+=*prhJ{XVJ0`#JGTLp;VvyT-n49tmFy(Lu;h#1cD}k$a4@iucjQqEfWh(bN z7vj_5XkXP1F*p7xO6`^T_Ls8{mDI!9qiRD8c6;xNH;G*^DjFrF|wJ!(ux} ztCso>lb=F8yW_w|>z)3Owu$8R1vA05I5>Q>oy_mr*A-G6lzS&#-Nq#r)Ka^gIcggE zNC++O3A>6aXp@Ry24*&3lWmALnf|}qWE)0@sJEis;MB%k>u1Vq$|@(-|4f%#pdYEdSZZ7$m@;>2m5aR>#=ajas4`ZJvBeSEgsa*cc_Q)h0^xO5vzwouk7|=z+UxrQT z5X>$gOJ~IehDSQ{^RhH-lZ`qgvYqkCLs1lOz^f-*eEdt}FV^7F6i(B5F8q)FT^Nk6 z#Fm>640$bZE{_RZ2&V0CqJUTar8zb)lg*Pu3UWo6`j6rAj8kIP6`xj%FmpCUxor^^ zEuFvZt;aorMGPxOcu#n4gPZ8F1+IPJ%C87p8XP6+bYI7*!ceD%e)2)$WwM^Obq7L1 zIvsv5x1VF(?F>ytt=<*(%sFyDz-)={#zws&Tr=mW?oH&q`Yty&)?Ze=zZPaSKDp+m`1a6W_2PSr6cEjgJQ@0`MlOafnj82}!qrs+=NTWb0c>vY zH&!pRq=LQ@m$ZIau!;DB}DNvkoXbYfepAJ>cgm^eUNFC8_r- ztv0)!+Au{az6ZVDR}p$<5LfueH^h6JiLut`mM4WBbppp%`>~AB`n9nv!R_IK<5N~d z>T2fl3*o}Lxy+^YH&{q3s(w{`w7j6&SgGm8)7-iIrLezlc3gTZFxfdXGCe$DFr7R= zGu7O4-c_Mmqg652v8dk;o&C=qr{NJ5OwEQ|A9|}^d1ub8-`p$yMzuW3h-aD`^)=!0 zMnflQ(Fp9xer#=7(6X{xwx@7Wb5nb9xZ?OOMf7|X#;)0m7lbQPh-FqYn7n-Q|$%XWhFM3 zco&+R-@7Xm3X(tqv$+AMX1QkrH>b3GbL0M2!wO>a(1Bq}f(wV{^y(c(23RVtxrzN| z^$W*XzLifk73R9NLYuKO?09qYd~?{D^7l~?&T4z4C~T)%_QF;g-zEM`&Rn;p(U0|o zZ4F-JI89YDsE9T8acmntSb6RvY+++i7mZ->p7H3is>=blcpZe;h8YQ%`f+ z3z@ign_+3BrfSQ`sTLSL6&0nkEP#q^o15$Ft2ZiRb!l$Y*Uln|$fGwm;7qlOaBke@ zhI~`F@VImz5xRj|rFXE}#W0@;OZh;P^7b7SDR>#)F*r7ddf8BljolV5Lk=2d?s(GY zIkF_BT|ZrYDzYqXb1VL`YUO8u^%FKvZ)`Zv>&9z2&%3PJP_Ll{Ywq=bwK`~B0_Hb2 z@>?sw4vn6fzo-s%^zAv(T+AV4tG}f>Ftx>d6gM~KpH)XZN=0Z* zI#ItECc4w4W>wh-V&ZKh%jAA{(`h@0`@JFzHTF~q#x%{@ZCZhJ^9-Rs>QBQBjXkRQ z&FAs_fo~6EjlJLr zW%&G=lVP;6XP!vz&mZ|Gz-`kBIIdfNqFF(I>>C^1&gS!l{=nY{FxPsOaA|BM_QR0Q&O$Q8?V#@-&%f^QZkzqt~hVM5I6PouRYAP(pma zvN3)Vr4i{|9GBQUu}r7W{g%d{#|21za-ROWQERK2jHgfb*BZUjP31!USvNO&O->|B z>W_R$qxO$G8cpO+{dvFMs6cKuv+9rgy++UXiRE1Vp?}`!nl_z{_2>Ozqr#{8Jgq_m!bz`? zJg*|ln~Cf>Y$sbQAL7XkL*m^PvTS)-&@TzU+?b$$9Fv>AxbF%hjm-eFquCsYKk+vj zy@wcoy#s^8GYv-`{CTfwRJJvnS@g%fxKTg3xon?5?B$KVTeEpUf7}}yb>~hrz2}d8 zccXSiGl@Tc)KtUQq4|`cKk>I3-9j$l3HU<4+2{+#aAh+oK!3qoDHHIZBNiN3i}!PIn8&!6|oMs3)p(tZA{-);1iHJb?Z$Nh1`uhvW=&!6@BiWGCv zJb0|~%h7^`Ai&hIXEb^aP*C0pBKd4{*bxWnBge08SiCinP4u;z3A?@ItFHLY{G$|7 zINq`_w}+k+cFi(qGZlS4W>?rT%b1PU^7(jIg#KB^OYc0jDK)HU?Cm$tIx^|K3GeNf zp3&II&klW$F=vZYsYO9!18)hvvkcs9Nuw|Frdba{GsTQP=GL%xmbu!AJ(2Z&ZrC}? z(3S;itU}Uf3xiI^`tvxrT||W69$xTxJ9VQmQZ0-fPx#ra%V5WghKTTBHg>=+pY?zx z+q$_M(b=eN-5gB9W#yZ|5@4ptVtx!4I(==Enh@tzB2R2I0MI;&!e{&rkN^#2A!;}d zQWWpQjjF$|mo@5CoG5I(W<6iBQ8R(i-|^XNYLdii@beXEYkMJrTf%ugWin$;Moj6NZBLbKlZv zQl&|dh(GPm8V%l_7<|MZ`itSFY8>aRCvVU>jW;^0b6n};CXI@{zx`f!hnpXdhaW$8 zRO#tEL~b!MvR}$&*0&ushkA~J%#2GeBI_4bbpdTyoRR&!?WvY0iPlvq^(JGl+Ehf^ao2 zHw_bI&M}iC>mw13q@_q<@~_O{R>r~`VF=z8I_tptu^39p#yP?Ig>tC(hpkn^;Nr$^ zNPV!)&ISB0jP-%AwQd)BhepJy?C$Vfv7qEJ$3lX?Z1|9xhRV&dHDP<*WRh9h_;hY- zI2jN{QB3?6?8Vccw7>IGF#+W1f(sMy40 z&o(~V`zl^Cy21^g&kt9OMNKCy+8dwOXDhZ**RJuA{-SCm;uDRJ^!|#GB&r%8={*&J zJ1&RFp~xFFKHjG*pzF_&3%S!mK8z1n!p*J~?XdN+9&Tec(Co|)tjO6)xa{O&3Zjas*&TmkWM+;>c^?xle zNVL}vXL^JhAPy|iA zuVLZoEGHT=;n!C8@*l(<+wIz5AwA=-*dZXc7>q z*@HG{E?d3ehE$d2B$sAR#7<$1H&v8{Wzoh4=5lMrUF#|K=WJlCcUFvLsfZ@l=*{6d zX-Q_6O|~8tn~>tQZw=2q&OxePIgRqp;~u5zWz#5cCT&+{Q1gosTmR1Cz>X%HVlrw9 z=TSTQ`HCY@%Xm7gST7u<_k?ZD-0czvBlp+j?a@0b^eDZmo3N(;w!&tujy27(cDXXJ z{B>V=_HiBvq-4#hO&j^{iZ`tP_VFzIyBqe`Yj_scR$Mr*d1&0o{b&W0Fxn4|5BBkf z2_PaBXJ#B9TM#xM=T>D1?^!nN&#LU$3HsL!&=slXH^;MWe^zlYJ=xmydi`C+Mk-}C z)5N{`htS`&VPayC3d8B)u|rcxerMlLcl&D)<;ZMVx!@I(}8xE`GPMaL6g8jZQ?ASrmh1gfB0DPISPE#8cc+HwI z%w?IxMSL)9ZqT94V(*#5oFLU}Th6U8;PO{-IXBmlOZyZx(?b;kE+5XiHqD_(Y6kn^ z99N-%IsLdwH07P7q9=3w(|Wi9!W|P4k9nNqGJQLAA@8j{DczYZ^gc5^%-xafB$9AzATwo$40|NjR_WS zh`{TT0{N?kTg#kKme5m_-QlM0UE^c)WSt_SHvp4gJlV4z%4D}aE)Rb}G+?&eJamAD z^reOi2VxXEenk^&Aav=k_xW)1cSW_D25E0O{Jeu|0R!9T^TN~yVlz#2PO{Fb;f9gXIBG= z?uCe&A2pqfFHQgW4@B%A<@4`>z^eg>mAjlZMc$uitXMo(-!`JH)#)J95l8P2yB>#QoeW4%MSpsjX_k@O*s4aYINj|4hS9LsZdD%qZJGHBx*+xc2eB7H**UUHB_P2Mvf369F|_ z_wlf`Q6{|fePo|H-|20;yYKx~q`;nVX`?<()vsnNFTXb`Sx?>QEH8D05tUdY|y98D9B`cez3x6IzE#Bg1|8fJ@(-5v`E z`OFHS#1^1O)3-d9Ggw|4SASosa4$CrcGb*aU#_4aJb}&g8QxKm7pDSf_&^2>o87|L zQ1!}pS9q^!tY+T&&WiDpEKoA_vC5T-05uEuUK+Nfiycj?*-XL>$>B)fPjJXg4(w_; zr0Kn03kU9uh7awop__V!$BH4F)s0b6NHf()$4`d-*>S~9o(K0t?w$*=+}y$Nf$t2@ zZ2&!73!jtkA>l>qz6M4~W5w|Vf)oV&C*Dp4%-?TX=rSCC_!24m*+DLy;>O#mL~KGgnSx# zR`Gryfz2v`U}>oL&LzN_(?qf4;?l;P<5H{QI6Jx#HzG31n6LDPf7Q@A$o=cIz-Abm z6#QUAvnfNV(ri8wx*FKJ3LH!t=wsoE1_ml2VA2quY-lbOK$0|2W7|~Dji)jGwjlvl zoAOPgd^B`6uqt)Q%QVc#8@lncWJ1$mf7j5P)#gCcDF4vV;oDM5E~YU))sWt+Nh_v7 zKG(2coiU@Eb5O7jTf+7f4mi%J0fafTj_YnwJxQ`r|>xUHl`V<9(kP3-894fy`{GRTaH}m$rdGp?rd_aAwu;tax z(LFtVch829h!WGAq!)z1#&u;>@Y#^3QmAM)Mnv&HiBlw&Vt$~3)xAQ3CG(dpk{%n! z&Id!@f3I)D>4yK^5XY_(CJr-6V(=|!4;GwwVZx4br6zxEKMOC=D#Ltlgtdp3eivtG zRc`CeknsEQJv}9~SQLD5r+OvinIhw%8tg_MgIHcmUSp*@T(Cc7Bs>fM1%HMaA>NZ{ zS49Eawvfl?y+cA;{WBioo%V|%S5D!RGT7ZD_stuYSg z=?JKnV}Lov6mLXaB$?UZxX_zJxPccBaPhIXLzWl)46zJJ@p8xV&%hkJ>Fs8TY{nu> z48(~Xq}jD9--qu~;Wn13L3O`rUSE!N`-!U zf=UV_wvs?@K^nT5GjW?4>P{%WZW)?+{3t zUoK(TJ<0A~hlN(WxfGZHsQ-YIht&r!-O(&EMr4FL8ZvXC#k9Gmg{;oY19ExsUAG$bm{BmfzF048~e9+!LWtOyJUc7mWE z1}*A-DraZ(dc=kZYkR{k93OAYjecpvdYo(v?53i;Q*xWmd1<})@Ey2-!RIF#UC32P zRFB3_2;wX$-Z{lvpn7GcJkT%t#bqn`3I-Yo;rQs|)4l*a`<|ycs6cwG8)OhZf*RyE zJJGEpm~K1Q(6lbWxN9em?mW3%DRuik5lLU2C!xhquCy*%bP8@BpLGzmH`%q~yV?G7 zwJ74^*>(A~+5RGy`(>-E%4-*3M;x*;n3j%(7q&NO1q$hOvdR(@M3zmlVSG!GuzHeg zy5sDKh{Gt$IFfc`=#^r=)EYrVonBmWpE1*n$PYPlKP};fm{@m4qUM zWtO=@sl2vOY3u9C4)pi)4|qSaz4_Dmcn`>os|S5XTF^z#TPIPS(2-1NB&(Y3JG||I zoD~F~8tXLgd#fEY)6X^LMxbyIsb`ty%ruzpcPT~78qaG?^5#*fN}q?! z5N~v$L&{?>W*@<$mDuTQmxIJ{^seNC7 zYhwh)QZY0KA%Q#9qMl$hFEQ5s$O|G{u=z&XxqtK1gN4V@7g`VnK|Xjfw1(GD#+~32 zXcnfGdRj7im`n#GPI5hXFGd>;7Pg%ndJaw#oJO&8K~4S*`QnC z(qM~WhoaF?Sc6t`HA>%5B3zl($)uCCuRZBNnhEwZmbaJOkgh#SzvF~cLKT2|r&eF) zL*b#RMx@v%?IX;hI@NTY6#E3S%9VAU;%4Ga>{{LG{6gD;Mdlo$Ee#qKh1NxF=Ev$; zO2Nwp28!L;BCb%)<}1DBfl9WgT<*@UD&$KwbiL$j1C=~krlowfwzxf8IK4kx!gDNT zOXZctJ~b8dyH}uHg*}k&Uyg7#BKU^rM2`7hxIuo6sA1^RKss% zvFxo<<6Zt6E)4Hu(3IP>F^UwuB-IEzK8MI8NxER&6qjr3r5UPrVts^z-#`g{&cCX>hzqQV%MZ^|9V)8uR!o z<8~^vl4z6!N(BHI+1VHwS5nb#qS8kAvC{18a;03L3(edw{j}j&Pk@Gq^u9zEh-ose zU4`PiguZQtEdw)5*s95H-xPRW!R0F+b1`TM6#-zz0Rt|Iz&Db+-vc)aX^`U#7L&{) zU^=>8;86vlbXABK;+%3lkq1B@WP83pB<5h}7tB)R#!Pe5u+mCcrB@z6MVjE*2i^^V zXWJjxR)E=Zp7rowt>E{O?C_pw0tWAqqj6;QB-mnRE=Th&<-z9DzBO~C=HNz(p7Xrx z^wKz9L$&Enyqem-L9!{1Sk*%oFuK`%$gjhu5Lr@@%OV{{#UKfZgKxlh z6v+gWU1Kuv03!>qIxF`kW>v?wKLw|@%OesFLX0m(n>kX}8*79aj7W;wCvzEG6v#4l zToS*a@=Op@Nz@;@&sRZ6XH+is)fzDtj(;^}RY>Z+cVViLN1xGMg({|;Kr zjP4{u??aytMnWp)%RR0G^t8@oXj6BRxxp-0C%gmO&our6Jmh~K%t25wTtEs!tufoB zr6MTFmh4}Yx!Hp7)cjdi!m~YC%gER~5*sID*V?|hl|o*)O&qF|zF8YHyD5Gmk_>V! zj?3F?QzoCLVeU$Ww3_c}X00 zA~VSUWEO|gfs^08FO|;}bb#U|78xitblF1Hp3S9os;~t1Y%`oDIy0d@FwqNF3U)*x z50^|+pSHBRX8Oe#;yro zm1*H~Y`7P4LA(qeQ4*4>%Th}Yje=p-8pP(rX+`^1gxDrO#9nZo4;&ZO2}!L4gAcPQ z1ipW(hR~)(2Lc$U4CweCp)k;?v!gP5 z_`r0EXxk}lC88QuR9O5&VQ7Ju6j~%gKd1z-Z)UH0NdKP(hy&~k*DK7h!94taU$;>3 zg_@~!M6+1qW>ZB6^VQv9s_Gsj+lV<*US)6q6BU<2Yj_9I*fX?)$2B$1b|gWi6q6{t zTG)gS$3OKFD|0SYj1nJJ-yy$;jDE#AnizPl83wn6V;GdX5HUlic#rGMe#9K zc?}xWD$A+RI>wkcGGqNLm^fg1QM?tDln91mzs$X%qpF&u^x0?F!hyQ+9z_HMG9ca%f&}6JmVkN!Lbccd(EL>rM z&mlJ&dTmBnvde2Z8{_i%&SNappNHzo`@x{Mj|a{}!M9_c$H(DqML)dJ?I0Hog6l7f zyx&gV%EF!=tiO)X8!fbF;R}VH9@KCsi-p0fH8I#)rcKmvN^;V0l)- zA`((QSWIqL_*EEiJLZkr6}Dh9fznd9T{dXFSc+=|CQBqmU1Dvq5A%+zc$cc;FQta^ zojMw(P_!mlVaM%on(TkNs?fEX(lZ!wu9%cNp+Ox4^9rFH_fxYT-tIhTF@j6Qm3@xz zyHP#(8)#O2b&~;mYvxcz%~B=tvN^W{^Q|WvgK2r3ERsY}jR=i>$FE-VvXZjiPm~Ek zo`{dZ7Av-fmtAj5Oc<=(gE<`foFFclEF6{5ZcyfJ@T5Z7u*iZilCaxlexYptUaue= zu}^KV8d#BnI*S!S;yZj>cgg>re@&kwh%&<`6JmDb#Z_!%95rNMR zd7LsC_qh)l^a)FZS7$}O>dH2%o+e8xuR#ect#nE{TUP8^%^ce0xO8)9B|wtoUeP85 z;i$pX6`;aovJfuA)_(omy;W^{d+wI0g0{P|H`|3zXedAHY^aIEdE*&(m&8*54?PRx zHTWeJuDl=cbQH9RFtc>GIE1u6dHD{Qjs%Y*`%493TnLs}am?V+{dF)ys?uqez8z+< zXGr8CJG`QS8bTrc1|P!iozhVk>FEp~{UDsXP(K3VQkNq_46@9QCyOx1)Mb+dFRG4k zs25wvc43kuCM5ASeFA0%+F(Zm=|9-tz;s?G&C%S3%^4SWln45{omtPa(A!r$N+ZRE zre6{~gEzr+5n>3uvE}gm3pt2kvqRx?O16o%KF(ccaRWK{0<9w16yBdyA^=4@{a1CTBc;l#=l9@%MJ+97-QCO{W|GgiT2IVJL*Gy|p z4&^}!4W@yy@ZT1s46j0MrA@xJlCegx6SZxv8Q_iM%%BieQGHthIofVh=GQs^YdqLQ95lQBF0H*mmwI><-5agGr$J|^RnwN>E)n73-B;yXTue0bF&8Nbd z@*I=JRpZiz-jhAp`Z*X7%0aRX)LVOjg~Af>LJ;tIn8f59H&FT_Tq-f9(hidy5ZNn3 zt?-K##QrR-SApW8!WYz#WM>?evd`gr!(1Y3(6Z;3GaMM(1s6df?1O)WcC88n2+N&a z-SHIO!@M;S&G82R0gY@XCG&;c0XHd<=HZlcunpt%3f}tO)?sQ+#Z1`PO{bRD?L4&# zr|;FUC3Gu&mA7uTx`|Bhwm~X2cm}w-BL(oC=V;*?K1lc1)K~|pi=+429Gsy{!_D<< z=VjdYx}A5n^`T~1>=w4Akd_Ni? z^n*t1yTi49hV*{mMY}^$o<1Lp;Pvs(UtJyDIxC=w*OS7Z;1ypZcKOJ=ix|3@e21sW zy!41kN0(WwNBX&JHgEe}KqNcR_fs^|-p^@CUDx^T0qoZ9-n0a(;QP8$Y1>y~_ctkK zoUBHXnuXm6nZ&&2-}ro)oK$#=T@$YV#>Yz-o=B4s_XNi2z! z5BbfCajf1+QEvc65wc(6wJ@u#PvnbXh$memw;UXy5<1dY;Mc=6vUk#qy%EQnj}b>R zg)a2~EV;O^!xR=|QfZdG35Q~!G|kX!u^pQC_*0q*Zh&qh|DWQyF7kD$=IfquG88 zz+G^4ut&BF)mxY1J-{@4qEb3_d;&fv*g&%Tb}u|C2F=g+V~_9xv-6=7cdxu> z+C+&h((GT1)%|O+_W5abifm37R3^7KQx;ABq5}nP0i~Ch&PSbGVDL=A-}%yx)*fg* zly;s(PWg7e6+O^;ivj2?u2~b(ekHfK$F$p6P2!J5?pUAFz!?4nY^Yl|HBF?&thcvt zB&mH~p!OM4hYZGG;lpSk_4+F5=8 zvvC$S@zT!mB{)+K<#}8urhQ-)3e3eaPWh{5AdEkeK8z<|F2X^c0AUcP1!XNA&b(5& zYjt%&C8>R{5BZm{5Vy0uuOu4B6}sp4_LkFbsRDNfSg<>HKpDDme11w-Zfy&HcEsc! zWCU}^j79mbf{=9Rki>rY-T3^-szPz)s#;cPDoB^u!?!{=aPUo7fY>nGoTo*`1u&hS ztxM(bz8sFmZPfSFO}mv}5UB`rZ7F8-4TnqQZ8rY{o*=aw(Uq)u6lpR-vkqF*8TGwgbnpU{bs9Pla((*pJ@0!$>f4GBNz z5iwH3;~~xS6+#f|A0$=M0`(oZT8WM7yb6Xey70ZJghpjRZ3|Iu-PV`dh7d)Vtlv{S zJu9;xJf8{cfeYXpN|nXjfOw%Zn?{>#TV$jtOPM!w5G+$0XTI-Jni9Cb-h}D%saho2 z;qt~FhE_RDn0tAA&>dZK(VmGeUr^-{toyCk#j6QVwRFkXEBCds3EMd5Q znCF%Huup?KcBB`C0ydg_m0Kdhl$=1CEdWFIC8vC;~?15heuZ||;aiSHvwl7;lxrF^cDiv(B zTxZx1!mpL#f(8{m(8`_&m$tZ7b2o73{a%7PZHnn{E_gXrSnk0o!;S}^6ue;LfOuPZ-!N>%FW-!oWlb z@KfXhE;C%tFATQ98)2j2AR__i+FqiNZ^C;|UNea|%8FB&@9!O~yL6!^k2bm^W=<$( zq|-sda{+YW>%kbV@KS@_Rq?A(UHP{EDhSsZQ{RU_)m|)3E7$z zRS|d#RjZ(CwkKaKp?S8CdjIDkWW+_8m3SIjsc_BPu%d5TyGp&V4*13#bUjfZxw>nO29fX8~ zUK{K$&scsGniaSwQo4jFY_twGVBQ@TM-&&@XHf97BFVcL{F8n?KzMlV8!$k=486gH zQlYV+uN0EgN^OH0q##lykbE}B z%Hk8nYgp~H&LQtfJ+NMW%`g)2h4$}gUM_b3$5y0~t4BBPQ;!`(SpU*wZ>TfO%$auR=rH zd?rWxsp;)Lca{*dccSDuuH1*dn<}4LoDKz;X z4T?MPIK8BN#3$~^D^qZ{I6^h&i#Ou)(4=$@`7Up~ai4{p97oQSc!NF%jfA`vWqb`Q zJ_dgSIpwX5Kj>DNB)%NY7OSF;PtwqB&>9+Zvw~KCVJ5&7bB<(Yg5G-3K!< zSmn=VvF=pq2b6Zh+~I2!x>ab6tzj55oIzpeKpIh!O?;O^RVc+2;?wNon{Yg0B1Xbh zlAUp~l_e!C$wXhI{19fufl`tr6MdcXk_BOgS-rmMjwE>dCFKN!R(2$rrUF^v z=19O=mJ4r+esDcvF~dAu=H;lUbj&n(yMUtdw!(>sov^WIu$f=b2?UEKlFY#c6XChp zN#^+#5mX>AJINI15jeq|>?Cu1g>DvJW)h}pj^{hXl`NGXNw#t>^OZm;N|HIwL7$Q= z#7YCp>BJZl`E?BP`YJ6h*h3}F;x)=@lbTSP34Y{Vw;HBPnhAtSPB*o3Ddh2+fWwe-RMVP_$l{41yUDA_jtp8)?9Dd@>wn-JTa{Q=XzRvN_jCuRYh!szDclP@nv5 z-9-rMe@0T#miV1yrYni*371i9GB!w{%6fM&;XBC|zAds~@s*eOJCLOCASFW7_4{|O zEC=5Y6X#?0ukedRoT(_nk*>_cAnPSISQn8w4eWBg5dmX=sY=waj`Q56u4z=$| zeN`|d^dp=IGeh4jur8&@N#fxF)&c5L<(;DqBKQ^&frK=z;MoXA>d*-1CRz8Od^TQe zfzka}m=<`M#yUqG7VuRXlzU0S2nGT!CPo-YD0i-HOz{oU9(>8qB(=e3@P&Ip|(pJW@q zhGuqT#KwW7m)nS50$K4%)?N=Y<*MuturpeZ&G@nrp5Qcbtfl7eVf5^&m(rYMCu_)d zvLwPMndmI?3xp=YCz<9_n50qzt;2ls?IvgxPU578cn5l6QQlL}&*)ecM}4G!eFMJS zD)d!f{{`ztjeya`!f#FwNGILt?J${%B)&UUyj!P=?Gx|x64J}VN)W7Yb_MnFGr1;$ zH4p73j}5%RFE&7v?=d6iHsn2hNY-cx-OS7Pbq+QbzJzR~@Unp<^PC1P!k|}7FG-+q zK0Cdz*=;!@V5XQvPDWD)U&qKTa(6ddVN_wG;s&G0FakEiwRRHb{sb#R;*I?@O!W6Y zv<;I-`4sMtUmg{gC@OX++61#Eb}h!XjMqwSD^NxvkGKXV>P*HM-@h6rdF`F;UpIm> z_aOHOz9(rP>cMgyOhvUY4FMeu|UGm#iG?^mzh$xy259V7#!71|L?dM@=-Cu9s!}?HTT#E> zYel%v%d=4TGpO&A5pRM8aJbq)q;@UI_$|!emHV}yiu~^1P}h*(WlhjZ1aiQeXnkXe zU$LJu5wPQ{bBWhrqFREyvaS{W2@_Q#Su1+XFz@{^+1OF6C0^BAT3#!boFKfR4}en1 zZTpfq+6*~QH5RExR){&s#+P{`G+|bu3enhy)ceAk@iFUxYOUOxd}xz+IHFdpt&60p zhA^w^2^eqRBA<@rl)r`XD&N9^wztsjvRATZiPCovrQXQnMIM*^4(g#&)^A3G$Qvx3gmH!w<-Cdh z4sUP=Ci5>_g*|JcY7qQ8e*+iChSgXIKw=|W_+j$Su_vVUL` zB{u5>zGNRH>tS_C3s4f(Bhc*cz!Z1j!*HxzmGvW`FS-v(sdm1hoUOPCW`?#wh`XVC zAZuUWFC0An!EdLuK&!O)Q*x}A(aF_cTv=B6&M^x#WK(k{pEj6F3Fhcm7EROBGS3&# zyKZhJZl!~7FUPox0qehW?Fx+V7iT?*4g`Aa2F zzES$I2VLwDTQ}m9hhieWtW6Z^fjS4*U{Vuz!B;Ef*rjFh7E`QIA3<7?qoiQx!IAo@ z2&mGUAJ?M|8804gv!a=FMIJp`?^w2Xk2C5MdQGohbY2NNF2`Ck15*{ek}bxqhujAm z)ksw}9%s7;>tXXSFQ$->cP$N9wQiCtTCg|7a~a&k&)u;Kc$ZXCvbRpaV1IQ2kBw5ur1bh_thXqb4KGv?1#<; z31X}@#zB+%zDT-?4bljG;D!?~E{W~tUp3lIVL&%hBXU8ZtJs^5r~@{J9iR~z8^E2Q zMIpujFcwb7Xs*Og{aB-RhUtcL)_w(~WL0vCMeZM>oX1iKN{Kcm;!(kzWH8a><`b%Y zFllM2Ttj(fh0-f|*>sM`Re48~j^q_m5428z4h`=v?XS;82)HC{W>-x;#}(Et!PW?| zR@@tl{YJoUq;DRLb@5m_g`bRp4?zy5!SCS@@JIL)JPA+1)9?&DmpKM@Sx`XFZx?2# zb<@~SWk%!QqmCGHCjPZQ{xl9?^az~e699W2f}f3s-4UtPT4kUML&_%>dhqk{unV@8 zT~+QzN-qJ-dI&~hb76qnI$(59u~6dAGsiv#qxpMcSmp~~gPp4b{RNsN^S>v-9>&Bp j(}=Tog`I2YG^c-!Jm7H{lke-pW*0)@i#bMq=JWptxIg!w literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/indexNamesMap.txt b/.metadata/.plugins/org.eclipse.jdt.core/indexNamesMap.txt new file mode 100644 index 0000000..68a85ef --- /dev/null +++ b/.metadata/.plugins/org.eclipse.jdt.core/indexNamesMap.txt @@ -0,0 +1 @@ +INDEX VERSION 1.126 diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/0.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/0.png new file mode 100644 index 0000000000000000000000000000000000000000..9abe3c5dfca657aa02d5841c2ea981d4cbd30700 GIT binary patch literal 210 zcmV;@04@KCP)UfgofqgTDg_xG30IBLx6Sr|rZr02$!*0(u~pZl8dniDU!fSCxS2XT1yHUI4K%3;=<`ZN2}) zmKXeAeSRhqo&gpE$zfstTY&xrruv9s}i$BxGToj?p?+fPsU50WEj00=nG$@%X!JN5tcy&eCX zw$_8$ATgpe!$AJVuK%o!p8xfxCj1AnNzy#D000t+fu81#-|+wd002ovPDHLkV1h3m BhKv9J literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/3.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/3.png new file mode 100644 index 0000000000000000000000000000000000000000..362902361b469f37ae347f96b1d1f5b04479d153 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`2A(dCAr*6y6C_xhCGHe_`rqH@ zY4)J7@^HNX!^ITI1|E%~gP;32pGZ0cO7t*2Vq{op?E3Bd39%xeUItHBKbLh*2~7aD CB_MhL literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/4.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/4.png new file mode 100644 index 0000000000000000000000000000000000000000..a930fe16c945152aed77887896b5b53fc6e5b66d GIT binary patch literal 509 zcmV~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|)*aR>e1fKOSfO`SN#%e&}w%-3?%M1RmK0gx)&j5>o zwo(h z@&7w^HvaF}(fGd;h(T=o=?VWqas&+k0p~e6|Gj3X{-3_L + + + \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/35/refactorings.index b/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/35/refactorings.index new file mode 100644 index 0000000..e385272 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/35/refactorings.index @@ -0,0 +1 @@ +1440800831420 Delete element diff --git a/.metadata/.plugins/org.eclipse.mylyn.tasks.ui/dialog_settings.xml b/.metadata/.plugins/org.eclipse.mylyn.tasks.ui/dialog_settings.xml new file mode 100644 index 0000000..9e1d9ed --- /dev/null +++ b/.metadata/.plugins/org.eclipse.mylyn.tasks.ui/dialog_settings.xml @@ -0,0 +1,18 @@ + +
    +
    + + + + + + +
    + + + + + +
    +
    +
    diff --git a/.metadata/.plugins/org.eclipse.team.cvs.core/.running b/.metadata/.plugins/org.eclipse.team.cvs.core/.running new file mode 100644 index 0000000..e69de29 diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/AnnouncerThread.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/AnnouncerThread.class new file mode 100644 index 0000000000000000000000000000000000000000..1a353e9215b6c48e3d068b8a2e972d56b7a5b5e6 GIT binary patch literal 1637 zcma)6U3U{j7=9*cvTZV+6 zyWtbvbj_NqM#lJBM8<#M2^F|=TKkc%$zXLYkfQFOk74Mccr08`=!Sc<`cT#k!$`+& zQHG&t$dazh4F*)F!qj z{_=%#m(^HWv<`1`OxjEblr}O5qNcIP&v4{XpmRHL+O!iFqj8+bD9@b>0x; zBD_dC_?F>B*R<5>Ia$B5QIkzuXoiHn*%Lj-z08cRS-RP38iwQL|0)Mrc{;bo)WGkF_FVPT5Y1U7;GU-B1>{RDsvbi z*#w3#P53WT2J^IDr~NI;;|^&hb(Es4BARoSpfSqm5K;CW?$d6XJOrxrSEF|v>14^l Yz4Shgl9@wYj`4j8Zy$y_eG`z+0a=xbbpQYW literal 0 HcmV?d00001 diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerJoinTimerTask.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerJoinTimerTask.class new file mode 100644 index 0000000000000000000000000000000000000000..a45f0d5ffaa515f2c404c7cba081f21765f270f0 GIT binary patch literal 416 zcmaJ-Jx{|h5PeS42120FF05?8P$MydSdbV{_>ic&JH=5=6T5P3r1GzrkQn#@{3yh^ zR7_QM($n3&`*?TXKc8O!&M`<4F$~>|w{LpR-Bgy|IirPlrmBUq{IM1bX>X0vBh^Sd z674KS!Z3IduY!B0YW`0!M9rLm7aQi?iA5{E%=w2$V+!aH7d@^Q8uFbQ| z5Mw7tiY76uepZ=#MWzu?8$gLkvA%A zI9yXX3`ZwNpayy$BkQ0`UPK-VCETWnFBzb7`ho0yN#}%JN>dWMg!#(fLl5Db`_vo; J9uP+8{{m=8X(0dr literal 0 HcmV?d00001 diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener$1.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener$1.class new file mode 100644 index 0000000000000000000000000000000000000000..aa7c1a2d1489f32806e70a344c8e6339b15fd1b7 GIT binary patch literal 2148 zcmb7Fi*6f56g?BCb>eQ?)RdMt+a)D0*PBPvmbkPKlR%1{hB^d66h#y7*xq_QV|K?e zp~?sF3;YFDNd-uJ0AIkrAR+Fo-Mn0-)Y5wAaUbX2J@?+f{{8(=0JB(6qK{!x*WKtx z*>rVHY`3&llDD*~1l$kZ)qwAcu;52pND+=qC(+N4eW}8I<;yj{A;L8t)fvv}njei! zk*mT>RiFFHk=h+!`uZ+89D4=5@pXp&yz;~#7|vNZgR?0lFk~T#^9+eGBXFVMOR>^w zY#WH%fnZ1%RGA0sJoL@Jd)RM)GhF}w?nkBxcp_{`hfi7=Oh%W&lp-{Ee+ zWz{X|kZ7~e@&mdZz%+%RMG%C%ZKsgMtSQSI22A0kPHueN)WA&(w{V*w)v1dWqM51I z9%*B3-a-y{sB`cpamJ(4d6C&3-7dP^0I1op7}qBjKE;9ot2z-dT%vsScs+;Du$06i z!^NIlTKF7aP_Hos#C5sWO%%hev7?DUOlO?dZXSDGjZ+EVXV5PwVcS!3RNHMXb@^UOPT6vL;&;|Dr4hDk2sXg{~I1eJ4TKk^pX#YD`sKB}FipMf2t58c%1~YjJ3Brko;*oGVTDi`;+LFP#2wQ|Bx~amM z1-4f{u)zYWEh$gwWx{;+5PG={LZax`2S(qf`4ji+MDZENZids#EQNj)v z`KEFDnvFAfePHDsf^(SsZRR#oIEyzdWC-W}7kj6nyoyksjW_WYA$3dYURQ9=rn0&6 zpc#t3>&lu|zE>E7C19ge$a5LomNX}M|xW6$Nj#xaEWj#G8`$b=|Fjn z>mB9RWst;sT;yll)fDphz%jcUe#T!O(g}eA=0RM$~VBi+}YRe$>y(CHz?YCW-#3!7# zOk1dWhPQ$WGJy=+oX~Lo*>+(3Rcx%{4u`A#Ue;bLK#$7>T)?L`J~PQ14LPI=H@#>` zQ`mJIpM&SrYKm|*sv*zqCP&mJoG$-Y(RlR6*0iX#Dxw`tu!S!P<1bc`J9W+P1T}e6 znaMw~f0NCd>%1XWyqfEWT=a_6O}}pATQGaf_j=cFNTHiiQistz;wIYPNYT9&!{=@w z*d>p*WziL3C_`j;Ma6mF()hU9Q%uG9Zz0M2qf9OG*>F;`b5Hp36!tICo#TcVNeCmf zh;csKtYf&ZAkA+M3&(m^Xc~#g%hv3#NbTa}kC29n@8a|>ruQ&IsBGi*g+0s?{=`Cg z?sw$xr{8^w_j?*2?%;Cz+762SW8!Bd(>J#Fo=e3jh{-6Zt$q+$o|}94g2TAacJ5)Mi)q9y zK3m))=yJ1}lZ6Fyjz#Z$m&HR|CRxf~r_C;-8CK>b8&d}6SNx3OYdqk0f+zMHRGCV# I)X4ew4}mh%ga7~l literal 0 HcmV?d00001 diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain$2.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain$2.class new file mode 100644 index 0000000000000000000000000000000000000000..c0bdf926b6884cd646efd581f7b985ed902e5da2 GIT binary patch literal 714 zcma)4%T60H6g|#N88S?pA+$XD;uQp>5>urc5U3JDRH_u(szvObiAfB@HJb5s(Z6C* zfx6%W_$but5Ghp`D3&by9{czlAN%h9&n!ULQzn_DUh=hbrcxVVLZCiEzn4U^lPQ4-+t)?oJqxtQQrKn6 zo+fQS3N$yy?Z8yw%$#mD!2R zwX27q?+goUjwjt{v0*PSDa0HW0?f1PNA9^#WJ*feK|fcr8{y@^AIBvS{xD^ps!!U* zRvTr$p$aT%MSMb;rm0rhgZz1;5FXx=;JNBUE!H?=5)CI1rboFF8}}l literal 0 HcmV?d00001