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 0000000..0b368ce Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap new file mode 100644 index 0000000..0b368ce Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.indexes/properties.index b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.indexes/properties.index new file mode 100644 index 0000000..6b1b30f Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.indexes/properties.index differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap new file mode 100644 index 0000000..dffc983 Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap new file mode 100644 index 0000000..0b368ce Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap new file mode 100644 index 0000000..0b368ce Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/71.tree b/.metadata/.plugins/org.eclipse.core.resources/.root/71.tree new file mode 100644 index 0000000..54698da Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.root/71.tree differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.snap b/.metadata/.plugins/org.eclipse.core.resources/.snap new file mode 100644 index 0000000..a48591a Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.snap differ 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 0000000..f99454a Binary files /dev/null and b/.metadata/.plugins/org.eclipse.jdt.core/50372563.index differ 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 0000000..f025474 Binary files /dev/null and b/.metadata/.plugins/org.eclipse.jdt.core/678131303.index differ 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 0000000..9abe3c5 Binary files /dev/null and b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/0.png differ diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/1.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/1.png new file mode 100644 index 0000000..834bd74 Binary files /dev/null and b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/1.png differ diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/2.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/2.png new file mode 100644 index 0000000..7a08c10 Binary files /dev/null and b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/2.png differ 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 0000000..3629023 Binary files /dev/null and b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/3.png differ 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 0000000..a930fe1 Binary files /dev/null and b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/4.png differ diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png new file mode 100644 index 0000000..56554ec Binary files /dev/null and b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png differ diff --git a/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/35/refactorings.history b/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/35/refactorings.history new file mode 100644 index 0000000..bd51724 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/TheButtonAutoFlair/2015/8/35/refactorings.history @@ -0,0 +1,4 @@ + + + + \ 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 0000000..1a353e9 Binary files /dev/null and b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/AnnouncerThread.class differ diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerJoinTimerTask.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerJoinTimerTask.class new file mode 100644 index 0000000..a45f0d5 Binary files /dev/null and b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerJoinTimerTask.class differ 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 0000000..aa7c1a2 Binary files /dev/null and b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener$1.class differ diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener$2.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener$2.class new file mode 100644 index 0000000..362c965 Binary files /dev/null and b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener$2.class differ 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 0000000..c0bdf92 Binary files /dev/null and b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain$2.class differ