Giter Club home page Giter Club logo

abstract-plugin-framework's Introduction

Abstract Plugin Framework

Abstract Plugin Framework is a library for abstracting away server platform specific implementations. Because of the work required, scope of the abstraction is quite limited.

Project discontinued
A complete rewrite of the project is available at https://github.com/plan-player-analytics/Platform-abstraction-layer with different kind of goals, mainly avoiding the need to extend, instead relying on composition.

Some of the features like commands, debugging, errors, benchmarks or static utilities were removed in the process because they were unnecessary features that are not needed in all projects, or lead to bad code patterns. You can use other libraries for those features.

Supported platforms

Currently all Spigot, Sponge, BungeeCord and Velocity based platforms are supported.

Available Features

  • Plugin Console Logging
  • Debug Logging (Console/Memory/File)
  • Error Logging (Console/File)
  • Benchmarking
  • Command Abstraction Layer
  • Task Scheduling Abstraction Layer
  • Misc. Utilities
    • UUIDFetcher
    • Formatter
    • Check (Class loaded checker)
    • Verify (Condition verification utility)

Documentation

abstract-plugin-framework's People

Contributors

aurorals3 avatar

Stargazers

 avatar  avatar

Watchers

 avatar

abstract-plugin-framework's Issues

Errors thrown when reloading a plugin

This error occured whilst reloading Plan on Sponge

java.nio.channels.ClosedByInterruptException: null
        at java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:202) ~[?:1.8.0_191]
        at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:216) ~[?:1.8.0_191]
        at java.nio.channels.Channels.writeFullyImpl(Channels.java:78) ~[?:1.8.0_191]
        at java.nio.channels.Channels.writeFully(Channels.java:101) ~[?:1.8.0_191]
        at java.nio.channels.Channels.access$000(Channels.java:61) ~[?:1.8.0_191]
        at java.nio.channels.Channels$1.write(Channels.java:174) ~[?:1.8.0_191]
        at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) ~[?:1.8.0_191]
        at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:316) ~[?:1.8.0_191]
        at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149) ~[?:1.8.0_191]
        at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233) ~[?:1.8.0_191]
        at java.io.BufferedWriter.close(BufferedWriter.java:266) ~[?:1.8.0_191]
        at java.nio.file.Files.write(Files.java:3357) ~[?:1.8.0_191]
        at com.djrapitops.plugin.logging.FileLogger.appendToFile(FileLogger.java:61) ~[FileLogger.class:?]
        at com.djrapitops.plugin.logging.FolderTimeStampFileLogger.log(FolderTimeStampFileLogger.java:54) ~[FolderTimeStampFileLogger.class:?]
        at com.djrapitops.plugin.logging.error.FolderTimeStampErrorFileLogger.log(FolderTimeStampErrorFileLogger.java:77) ~[FolderTimeStampErrorFileLogger.class:?]
        at com.djrapitops.plugin.logging.error.CombineErrorHandler.log(CombineErrorHandler.java:28) ~[CombineErrorHandler.class:?]
        at com.djrapitops.plan.system.processing.Processing.exceptionHandlerNonCritical(Processing.java:104) ~[Processing.class:?]
        at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:822) [?:1.8.0_191]
        at java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:797) [?:1.8.0_191]
        at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474) [?:1.8.0_191]
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1595) [?:1.8.0_191]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_191]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_191]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_191]
[18:07:24] [Plan Non critical-pool-1/ERROR] [plan]: Error was caught by com.djrapitops.plugin.logging.error.FolderTimeStampErrorFileLogger
java.nio.channels.ClosedByInterruptException: null
        at java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:202) ~[?:1.8.0_191]
        at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:216) ~[?:1.8.0_191]
        at java.nio.channels.Channels.writeFullyImpl(Channels.java:78) ~[?:1.8.0_191]
        at java.nio.channels.Channels.writeFully(Channels.java:101) ~[?:1.8.0_191]
        at java.nio.channels.Channels.access$000(Channels.java:61) ~[?:1.8.0_191]
        at java.nio.channels.Channels$1.write(Channels.java:174) ~[?:1.8.0_191]
        at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) ~[?:1.8.0_191]
        at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:316) ~[?:1.8.0_191]
        at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149) ~[?:1.8.0_191]
        at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233) ~[?:1.8.0_191]
        at java.io.BufferedWriter.close(BufferedWriter.java:266) ~[?:1.8.0_191]
        at java.nio.file.Files.write(Files.java:3357) ~[?:1.8.0_191]
        at com.djrapitops.plugin.logging.FileLogger.appendToFile(FileLogger.java:61) ~[FileLogger.class:?]
        at com.djrapitops.plugin.logging.FolderTimeStampFileLogger.log(FolderTimeStampFileLogger.java:54) ~[FolderTimeStampFileLogger.class:?]
        at com.djrapitops.plugin.logging.error.FolderTimeStampErrorFileLogger.log(FolderTimeStampErrorFileLogger.java:77) ~[FolderTimeStampErrorFileLogger.class:?]
        at com.djrapitops.plugin.logging.error.CombineErrorHandler.log(CombineErrorHandler.java:28) ~[CombineErrorHandler.class:?]
        at com.djrapitops.plan.system.processing.Processing.exceptionHandlerNonCritical(Processing.java:104) ~[Processing.class:?]
        at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:822) [?:1.8.0_191]
        at java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:797) [?:1.8.0_191]
        at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474) [?:1.8.0_191]
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1595) [?:1.8.0_191]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_191]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_191]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_191]

NPE on Timings

plan-player-analytics/Plan#197

[Jul 26, 12:50:37] main.java.com.djrapitops.plan.data.cache.queue.GetConsumer Caught java.lang.NullPointerException
[Jul 26, 12:50:37]   com.djrapitops.plugin.utilities.status.Timings.markExecution(Timings.java:27)
[Jul 26, 12:50:37]   com.djrapitops.plugin.utilities.BenchUtil.stop(BenchUtil.java:39)
[Jul 26, 12:50:37]   main.java.com.djrapitops.plan.utilities.Benchmark.stop(Benchmark.java:27)
[Jul 26, 12:50:37]   main.java.com.djrapitops.plan.database.tables.IPsTable.getIPAddresses(IPsTable.java:105)
[Jul 26, 12:50:37]   main.java.com.djrapitops.plan.database.databases.SQLDB.giveUserDataToProcessors(SQLDB.java:314)
[Jul 26, 12:50:37]   main.java.com.djrapitops.plan.data.cache.queue.GetConsumer.consume(DataCacheGetQueue.java:80)
[Jul 26, 12:50:37]   main.java.com.djrapitops.plan.data.cache.queue.GetConsumer.consume(DataCacheGetQueue.java:57)
[Jul 26, 12:50:37]   main.java.com.djrapitops.plan.data.cache.queue.Consumer.run(Consumer.java:33)
[Jul 26, 12:50:37]   com.djrapitops.plugin.task.RunnableFactory$1.run(RunnableFactory.java:36)
[Jul 26, 12:50:37]   org.bukkit.craftbukkit.v1_12_R1.scheduler.CraftTask.run(CraftTask.java:58)
[Jul 26, 12:50:37]   org.bukkit.craftbukkit.v1_12_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:52)
[Jul 26, 12:50:37]   com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[Jul 26, 12:50:37]   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[Jul 26, 12:50:37]   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[Jul 26, 12:50:37]   java.lang.Thread.run(Thread.java:748)

[Jul 26, 12:50:37]

ArrayIndexOutOfBounds on Debug log

APF version: 3.0.1-SNAPSHOT 747a1f4

Reported exception:

| 10-15 21:00:50 | com.djrapitops.plan.system.processing.Processing caught ArrayIndexOutOfBoundsException
| 10-15 21:00:50 | java.lang.ArrayIndexOutOfBoundsException: Index 342 out of bounds for length 339
| 10-15 21:00:50 |    java.base/java.util.ArrayDeque.elementAt(ArrayDeque.java:260)
| 10-15 21:00:50 |    java.base/java.util.ArrayDeque.pollFirst(ArrayDeque.java:380)
| 10-15 21:00:50 |    java.base/java.util.ArrayDeque.poll(ArrayDeque.java:538)
| 10-15 21:00:50 |    com.djrapitops.plugin.utilities.EjectingQueue.add(EjectingQueue.java:39)
| 10-15 21:00:50 |    com.djrapitops.plugin.logging.debug.MemoryDebugLogger.logOn(MemoryDebugLogger.java:32)
| 10-15 21:00:50 |    com.djrapitops.plugin.logging.debug.CombineDebugLogger.logOn(CombineDebugLogger.java:26)
| 10-15 21:00:50 |    com.djrapitops.plugin.benchmarking.Timings.lambda$end$0(Timings.java:74)
| 10-15 21:00:50 |    java.base/java.util.Optional.ifPresent(Optional.java:183)
| 10-15 21:00:50 |    com.djrapitops.plugin.benchmarking.Timings.end(Timings.java:74)
| 10-15 21:00:50 |    com.djrapitops.plan.system.database.databases.sql.processing.AbstractSQLStatement.stopBenchmark(AbstractSQLStatement.java:37)
| 10-15 21:00:50 |    com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement.execute(ExecStatement.java:28)
| 10-15 21:00:50 |    com.djrapitops.plan.system.database.databases.sql.SQLDB.execute(SQLDB.java:280)
| 10-15 21:00:50 |    com.djrapitops.plan.system.database.databases.sql.tables.Table.execute(Table.java:153)
| 10-15 21:00:50 |    com.djrapitops.plan.system.database.databases.sql.tables.PingTable.insertPing(PingTable.java:71)
| 10-15 21:00:50 |    com.djrapitops.plan.system.database.databases.sql.operation.SQLSaveOps.ping(SQLSaveOps.java:136)
| 10-15 21:00:50 |    com.djrapitops.plan.system.processing.processors.player.PingInsertProcessor.run(PingInsertProcessor.java:64)
| 10-15 21:00:50 |    com.djrapitops.plan.system.processing.Processing.lambda$submitCritical$1(Processing.java:61)
| 10-15 21:00:50 |    java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700)
| 10-15 21:00:50 |    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
| 10-15 21:00:50 |    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
| 10-15 21:00:50 |    java.base/java.lang.Thread.run(Thread.java:834)

Original issue: plan-player-analytics/Plan#755

Likely cause: Concurrent access to ArrayDeque collection

io.netty.handler.codec.EncoderException: String too big (was 59112 bytes encoded, max 44767)

e.g. /plan search 3 -> Client is disconnected because the String sent by ISender.sendMessage(String) is too big, splitting Strings when size too big should help.

26.07 12:40:29 [Server] ERROR io.netty.handler.codec.EncoderException: String too big (was 59112 bytes encoded, max 44767)
26.07 12:40:29 [Disconnect] User Fuzzlemann has disconnected, reason: Disconnected

Command Permission checks

Help command should check if the user has permission for subcommand.
Should also check permission for the help command.

NPE on Timings.toStringArray

java.lang.NullPointerException | /debug
    com.djrapitops.plugin.utilities.status.obj.BenchmarkObj.lambda$getAverage$0(BenchmarkObj.java:29)
    java.util.stream.ReferencePipeline$5$1.accept(ReferencePipeline.java:227)
    java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
    java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    java.util.stream.LongPipeline.reduce(LongPipeline.java:438)
    java.util.stream.LongPipeline.sum(LongPipeline.java:396)
    com.djrapitops.plugin.utilities.status.obj.BenchmarkObj.getAverage(BenchmarkObj.java:29)
    com.djrapitops.plugin.utilities.status.Timings.lambda$asStringArray$1(Timings.java:34)
    java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1548)
    java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
    com.djrapitops.plugin.utilities.status.Timings.asStringArray(Timings.java:35)
    main.java.com.djrapitops.plan.systems.webserver.response.DebugPageResponse.appendBenchmarks(DebugPageResponse.java:159)
    main.java.com.djrapitops.plan.systems.webserver.response.DebugPageResponse.buildParagraph(DebugPageResponse.java:59)
    main.java.com.djrapitops.plan.systems.webserver.response.DebugPageResponse.(DebugPageResponse.java:37)
    main.java.com.djrapitops.plan.systems.webserver.ResponseHandler.getResponse(ResponseHandler.java:82)
    main.java.com.djrapitops.plan.systems.webserver.RequestHandler.handle(RequestHandler.java:40)
    com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)
    sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)
    com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82)
    sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675)
    com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)
    sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:645)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    java.lang.Thread.run(Thread.java:745)

Original issue plan-player-analytics/Plan#464

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.