Code Monkey home page Code Monkey logo

staffplusplus's Introduction

Staff++

Originally created by Shortninja66. After Shortninja66's early passing, Qball continued maintaining and developing the plugin.

Now after a while I stumbled upon it and its background. My goal is to add new functionalities and fix a lot of the open bugs, hopefully making this plugin very robust with many features useful for small and big servers.

I forked this repository to implement a release cycle strategy in which different versions for different server will be supported. The main reason for this is so that we can start implementing new features easily using new versions of the spigot api, without worrying about backwards compatibility.

Builds

master release1.19.0 release1.18.0 release1.17.0 release1.16.0 release1.15.0 release1.14.0 release1.13.0 release1.12.0

Versions

With this new release cycle a new versioning strategy is introduced:

For every spigot version we will create a new release. This means that you must download not the newest update but the one suitable for your server.

  • Server on Spigot 1.12.x -> StaffPlusPlus 1.12.x
  • Server on Spigot 1.13.x -> StaffPlusPlus 1.13.x
  • Server on Spigot 1.14.x -> StaffPlusPlus 1.14.x
  • Server on Spigot 1.15.x -> StaffPlusPlus 1.15.x
  • Server on Spigot 1.16.x -> StaffPlusPlus 1.16.x
  • Server on Spigot 1.17.x -> StaffPlusPlus 1.17.x
  • Server on Spigot 1.18.x -> StaffPlusPlus 1.18.x

Support

  • New features will be added to all versions >= 1.12
  • Bugs will be fixed on all versions >= 1.12
  • End Of Life, no support will be provided for versions < 1.12

Useful links

Contributing

  • Fork this repo
  • Clone your repo
  • Make your changes
  • Submit a pull request

Building

  • Clone this repo
  • Run mvn clean package
  • Wait (if you have never ran BuildTools before it will take a while future builds will be faster)

staffplusplus's People

Contributors

a248 avatar adamiok avatar alexislusttt avatar chimpgamer avatar dependabot[bot] avatar electronicboy avatar eltuna avatar garagepoort avatar kaerix avatar krazyxwolf avatar montlikadani avatar mrkwtkr avatar mtm123 avatar ne137 avatar penguinowl avatar qballl avatar samuelthng avatar shortninja66 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

staffplusplus's Issues

How do i establish a db connection the right way? (config.yml)

this are the standard settings, which work like a charm:

storage:
type: sqlite
mysql:
host: localhost
user: root
database: root
password: mypass
port: 3306
max-pool-size: 5
ssl-enabled: false

first thing: I am 100% sure that i am using the right IP address, as well as user, database, and password.

What is the right way to enter the data? When I restart the server with smth like this:

storage:
type: mysql
mysql:
host: 123.123.123.123
user: root
database: minecraft
password: password
port: 3306

Things do no longer work.

adding ' does not change anything:

storage:
type: 'mysql'
mysql:
host: '123.123.123.123'
user: 'root'
database: 'minecraft'
password: 'mypass'
port: 3306

What am I doing wrong?

[feature request] points-based reputation and punishments

Something I plan to do on my server when 1.17 comes out is to implement a new points-based player reputation system that keeps n00bs on a tight leash, but makes it so long-time players don't get perma-banned as easily.

This is a feature I want bad enough that I intend to fork BanManager and write it myself if I can't find another solution, but I thought it would be worth sharing here since you are trying to revive staff+. This could be a feature that would set it apart from others.

Here is how the reputation system would work, keep in mind that the time periods and points values would all be configurable.

  1. A brand new player is assigned a reputation score of 3 when they first join.
  2. A player earns points by logging in at least once every month and after 90 days they will be awarded 1 reputation point and this repeats until the player accumulates a maximum of 10 points. If they fail to join the server for a month then the 90 day timer will reset next time they join.
  3. A player will lose 1 point for warnings or mutes. They will lose 2 points for suspensions/tempbans.
  4. If their reputation drops to 0 they will be perma-banned without the ability to appeal.

A punishment rollback feature is a must-have that automatically restores points if the punishment is successfully appealed.

A hook system that allows commands to be run when a punishment is given and commands that run when the punishment expires or is rolled back.

If punishments are tied to report investigations as described in feature request #131, then it will be important to make sure the the status of a report is changed from "resolved" to "dismissed" if the related punishment is rolled back. For this to work seamlessly I would make it so a staff member can only deal punishments while in "investigation mode". If there is no report, but a staff member observes someone breaking the rules, then that staff member can create a new report with /reportplayer that instantly assigns the report to themselves and enters investigation mode for that report. If they need to perform some sort of "emergency stop" on a player, I would use the freeze command for this and hook a command to it that mutes the player if frozen and sets permissions that sync to discord to mute them there as well.

bug

I have a problem with the plugin
it sends this in the console when I want to reload it

[18:54:59 ERROR]: Error occurred while enabling StaffPlusPlusDiscord v1.16.12 (Is it up to date?)
java.lang.IllegalStateException: Method has too many Body parameters: public abstract void be.garagepoort.staffplusplus.discord.api.DiscordClient.sendFileEvent(java.lang.String,feign.form.FormData)
        at feign.Util.checkState(Util.java:130) ~[?:?]
        at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:117) ~[?:?]
        at feign.Contract$BaseContract.parseAndValidatateMetadata(Contract.java:66) ~[?:?]
        at feign.ReflectiveFeign$ParseHandlersByName.apply(ReflectiveFeign.java:154) ~[?:?]
        at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:52) ~[?:?]
        at feign.Feign$Builder.target(Feign.java:251) ~[?:?]
        at feign.Feign$Builder.target(Feign.java:247) ~[?:?]
        at be.garagepoort.staffplusplus.discord.reports.ReportListener.init(ReportListener.java:44) ~[?:?]
        at be.garagepoort.staffplusplus.discord.StaffPlusPlusDiscord.initListener(StaffPlusPlusDiscord.java:66) ~[?:?]
        at be.garagepoort.staffplusplus.discord.StaffPlusPlusDiscord.initializeListeners(StaffPlusPlusDiscord.java:48) ~[?:?]
        at be.garagepoort.staffplusplus.discord.StaffPlusPlusDiscord.onEnable(StaffPlusPlusDiscord.java:36) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[server.jar:git-Paper-545]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:380) ~[server.jar:git-Paper-545]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:483) ~[server.jar:git-Paper-545]
        at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:304) ~[?:?]
        at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:262) ~[?:?]
        at com.rylinaux.plugman.util.PluginUtil.reload(PluginUtil.java:391) ~[?:?]
        at com.rylinaux.plugman.command.ReloadCommand.execute(ReloadCommand.java:122) ~[?:?]
        at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:95) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[server.jar:git-Paper-545]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[server.jar:git-Paper-545]
        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:810) ~[server.jar:git-Paper-545]
        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchServerCommand(CraftServer.java:772) ~[server.jar:git-Paper-545]
        at net.minecraft.server.v1_16_R3.DedicatedServer.handleCommandQueue(DedicatedServer.java:413) ~[server.jar:git-Paper-545]
        at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:380) ~[server.jar:git-Paper-545]
        at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1216) ~[server.jar:git-Paper-545]
        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1004) ~[server.jar:git-Paper-545]
        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[server.jar:git-Paper-545]
        at net.minecraft.server.v1_16_R3.MinecraftServer$$Lambda$3108/0x00000000edc7aee0.run(Unknown Source) ~[?:?]
    -------------------------

    **IT'S UP TO DATE!**

[bug] vanish state desync from staff mode

the problem
stuck in vanish mode and toggling staff mode does not resolve.

also running the command "/vanish <username> disable" fails with the error of user not found

to reproduce
shutdown the server while a staff member is connected and in staff mode

my workaround
manually edit data.yml to set the vanish mode to NONE and restart the server

Lag issue on commands

MC Versión: 1.16.3
Using latest Staff++ versión

Hello, there is a issue when you run some commands.

• For example when you run /freeze server is start to lagging for some seconds, the same with command /teleport
Crash log: https://pastebin.com/fDLz4aBW

• Also other small bug if you use /freeze command without args returns error.
[19:51:02] [Server thread/INFO]: Zoiter7 issued server command: /freeze [19:51:02] [Server thread/ERROR]: null org.bukkit.command.CommandException: Unhandled exception executing 'freeze' in net.shortninja.staffplus.server.command.cmd.mode.FreezeCmd(freeze) at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:169) ~[patched_1.16.3.jar:git-Paper-220] at org.bukkit.craftbukkit.v1_16_R2.CraftServer.dispatchCommand(CraftServer.java:802) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.PlayerConnection.handleCommand(PlayerConnection.java:1908) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.PlayerConnection.a(PlayerConnection.java:1719) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.PacketPlayInChat.a(PacketPlayInChat.java:5) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:23) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.TickTask.run(SourceFile:18) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.MinecraftServer.ba(MinecraftServer.java:1135) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.MinecraftServer.executeNext(MinecraftServer.java:1128) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.MinecraftServer.sleepForTick(MinecraftServer.java:1089) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:1003) ~[patched_1.16.3.jar:git-Paper-220] at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[patched_1.16.3.jar:git-Paper-220] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_242] Caused by: java.lang.ArrayIndexOutOfBoundsException: 0 at net.shortninja.staffplus.server.command.cmd.mode.FreezeCmd.getMinimumArguments(FreezeCmd.java:59) ~[?:?] at net.shortninja.staffplus.server.command.cmd.StaffPlusPlusCmd.lambda$execute$0(StaffPlusPlusCmd.java:43) ~[?:?] at net.shortninja.staffplus.common.CommandUtil.executeCommand(CommandUtil.java:14) ~[?:?] at net.shortninja.staffplus.server.command.cmd.StaffPlusPlusCmd.execute(StaffPlusPlusCmd.java:39) ~[?:?] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.16.3.jar:git-Paper-220] ... 17 more

• And other suggestion, add possibility to turn off the "StaffChat over bungeecord" feature.

refactor: rebuild the config based on rank system

Pretty simple, as discussed on call @garagepoort

   builder: 
      permission: 'staff.builder'
      weight: 1
      gui: 
        - compass-module:1
        - vanish-module:2
        - counter-module:3
      block-manipulation: true
      inventory-interaction: true
    Admin:
      permission: 'staff.admin'
      weight: 3
      gui:
      - compass-module:1
      - vanish-module:3
      - gui-module:2
      - examine-module:8
      - follow-module:9

Error on saving file

Version: Spigot 1.16.3
StaffPlus version: Latest for 1.16.3

  1. When user disconnects from server the user keeps his inv.
  2. Sometimes when user disconnect from server console throws this error with saving data.

[07:30:59] [Craft Scheduler Thread - 1014/WARN]: [StaffPlus] Plugin StaffPlus v1.16.32 generated an exception while executing task 7731272 java.lang.NullPointerException: Nodes must be provided. at org.yaml.snakeyaml.nodes.NodeTuple.<init>(NodeTuple.java:28) ~[patched_1.16.3.jar:git-Paper-251] at org.yaml.snakeyaml.representer.BaseRepresenter.representMapping(BaseRepresenter.java:164) ~[patched_1.16.3.jar:git-Paper-251] at org.yaml.snakeyaml.representer.SafeRepresenter$RepresentMap.representData(SafeRepresenter.java:321) ~[patched_1.16.3.jar:git-Paper-251] at org.bukkit.configuration.file.YamlRepresenter$RepresentConfigurationSection.representData(YamlRepresenter.java:24) ~[patched_1.16.3.jar:git-Paper-251] at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:95) ~[patched_1.16.3.jar:git-Paper-251] at org.yaml.snakeyaml.representer.BaseRepresenter.representMapping(BaseRepresenter.java:157) ~[patched_1.16.3.jar:git-Paper-251] at org.yaml.snakeyaml.representer.SafeRepresenter$RepresentMap.representData(SafeRepresenter.java:321) ~[patched_1.16.3.jar:git-Paper-251] at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:95) ~[patched_1.16.3.jar:git-Paper-251] at org.yaml.snakeyaml.representer.BaseRepresenter.represent(BaseRepresenter.java:65) ~[patched_1.16.3.jar:git-Paper-251] at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:275) ~[patched_1.16.3.jar:git-Paper-251] at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:243) ~[patched_1.16.3.jar:git-Paper-251] at org.yaml.snakeyaml.Yaml.dump(Yaml.java:220) ~[patched_1.16.3.jar:git-Paper-251] at org.bukkit.configuration.file.YamlConfiguration.saveToString(YamlConfiguration.java:41) ~[patched_1.16.3.jar:git-Paper-251] at org.bukkit.configuration.file.FileConfiguration.save(FileConfiguration.java:65) ~[patched_1.16.3.jar:git-Paper-251] at net.shortninja.staffplus.server.data.file.DataFile.save(DataFile.java:45) ~[?:?] at net.shortninja.staffplus.session.SessionLoader.lambda$saveSession$0(SessionLoader.java:81) ~[?:?] at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftTask.run(CraftTask.java:99) ~[patched_1.16.3.jar:git-Paper-251] at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54) ~[patched_1.16.3.jar:git-Paper-251] at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[patched_1.16.3.jar:git-Paper-251] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_242] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_242] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_242]

Error after using /staff

I don't have much info here.
When ever I execute /staff in-game, console reads out this warning.
I didn't have an issue on v1.16.50

20.03 12:49:23 [Server] WARN Plugin StaffPlus v1.16.52 generated an exception while executing task 30784
20.03 12:49:23 [Server] INFO java.lang.NullPointerException: Nodes must be provided.
20.03 12:49:23 [Server] INFO at org.yaml.snakeyaml.nodes.NodeTuple.<init>(NodeTuple.java:28) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at org.yaml.snakeyaml.representer.BaseRepresenter.representMapping(BaseRepresenter.java:164) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at org.yaml.snakeyaml.representer.SafeRepresenter$RepresentMap.representData(SafeRepresenter.java:321) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:95) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at org.yaml.snakeyaml.representer.BaseRepresenter.represent(BaseRepresenter.java:65) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:275) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:243) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at org.yaml.snakeyaml.Yaml.dump(Yaml.java:220) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at org.bukkit.configuration.file.YamlConfiguration.saveToString(YamlConfiguration.java:41) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at org.bukkit.configuration.file.FileConfiguration.save(FileConfiguration.java:65) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at net.shortninja.staffplus.server.data.file.DataFile.save(DataFile.java:45) ~[?:?]
20.03 12:49:23 [Server] INFO at net.shortninja.staffplus.session.SessionLoader.save(SessionLoader.java:120) ~[?:?]
20.03 12:49:23 [Server] INFO at net.shortninja.staffplus.session.SessionLoader.lambda$saveSession$0(SessionLoader.java:110) ~[?:?]
20.03 12:49:23 [Server] INFO at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:99) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[patched_1.16.4.jar:git-Paper-352]
20.03 12:49:23 [Server] INFO at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
20.03 12:49:23 [Server] INFO at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
20.03 12:49:23 [Server] INFO at java.lang.Thread.run(Thread.java:834) [?:?]

Staff++ shadows de.tr7zw.nbtapi without prefixing it

When starting CommandAPI and Staff++ at the same time, I get this error:
[21:16:36 WARN]: [CommandAPI] Loaded class de.tr7zw.nbtapi.NBTContainer from StaffPlus v1.17.4 which is not a depend, softdepend or loadbefore of this plugin.
This indicates that both Staff++ and CommandAPI are shadowing the nbtapi library without prefixing it to prevent overloading. Both libraries should prefix the shadowed library in case they require different versions.

[Bug] Staff mode allows multiverse inventories to move to other worlds and overwrite

I have multiverse inventories setup so my Creative and Survival worlds have different inventories.

If I am in the Creative world, enable staff mode with /staff, then do /mv tp Survival. Multiverse Inventories replaces the staff mode inventory with that world's items, but staff mode is still enabled.
So I do /staff to turn staff mode off. Now my inventory get's replaced with the inventory I had loaded in creative and my Survival items are gone.

Stuck Vanished

Hi, I felt like this might be the best place to let you know, I'm having staff members and OPs get stuck in Vanish mode. Even after restarts, I've checked the config and followed the wiki when setting it up. Is there a way to force them back out of vanished upon leaving the server? it seems that the toggle is not working. I can provide you with server log if you need. The only fix for this ive found is to delete the players playerdata which is not good of course. I did it to myself, but Id much rather not do that to a player. Any help would be greatly appreciated.

issue on startup: logging

[23:18:09] [Server thread/ERROR]: [STDERR] [net.shortninja.staffplus.core.be.garagepoort.mcioc.org.slf4j.helpers.Util] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
[23:18:09] [Server thread/ERROR]: [STDERR] [net.shortninja.staffplus.core.be.garagepoort.mcioc.org.slf4j.helpers.Util] SLF4J: Defaulting to no-operation (NOP) logger implementation
[23:18:09] [Server thread/ERROR]: [STDERR] [net.shortninja.staffplus.core.be.garagepoort.mcioc.org.slf4j.helpers.Util] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

and

[23:18:26] [Server thread/ERROR]: [StaffPlus] [STDERR] log4j:WARN No appenders could be found for logger (net.shortninja.staffplus.core.be.garagepoort.mcsqlmigrations.org.reflections.Reflections).
[23:18:26] [Server thread/WARN]: Nag author(s): '[Shortninja,Qball,Garagepoort]' of 'StaffPlus' about their usage of System.out/err.print. Please use your plugin's logger instead (JavaPlugin#getLogger).
[23:18:26] [Server thread/ERROR]: [StaffPlus] [STDERR] log4j:WARN Please initialize the log4j system properly.
[23:18:26] [Server thread/ERROR]: [StaffPlus] [STDERR] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

I understand that this is part of the log4j fix. I'd appreciate a different way to log things. :) thank you!

ERROR]: Could not pass event PlayerJoinEvent to StaffPlus v1.18.9

Checking the console today showed me several log entries like this. Can I do something to get the error to be gone?

[07:52:15 ERROR]: Could not pass event PlayerJoinEvent to StaffPlus v1.18.9
java.util.NoSuchElementException: packet_handler
at io.netty.channel.DefaultChannelPipeline.getContextOrDie(DefaultChannelPipeline.java:1073) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
at io.netty.channel.DefaultChannelPipeline.addBefore(DefaultChannelPipeline.java:248) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
at io.netty.channel.DefaultChannelPipeline.addBefore(DefaultChannelPipeline.java:237) ~[netty-all-4.1.68.Final.jar:4.1.68.Final]
at com.comphenix.protocol.injector.netty.PipelineProxy.addBefore(PipelineProxy.java:61) ~[ProtocolLib540.jar:?]
at com.comphenix.protocol.injector.netty.ChannelInjector$3$1.addBefore(ChannelInjector.java:316) ~[ProtocolLib540.jar:?]
at net.shortninja.staffplus.server.compatibility.v1_1x.Protocol_v1_18_R0.inject(Protocol_v1_18_R0.java:121) ~[staffplusplus-core-1.18.9.jar:?]
at net.shortninja.staffplus.core.domain.player.listeners.PlayerJoin.onJoin(PlayerJoin.java:49) ~[staffplusplus-core-1.18.9.jar:?]
at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor1360.execute(Unknown Source) ~[?:?]
at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:75) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:git-Paper-200]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:629) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
at net.minecraft.server.players.PlayerList.postChunkLoadJoin(PlayerList.java:363) ~[paper-1.18.1.jar:git-Paper-200]
at net.minecraft.server.players.PlayerList.lambda$placeNewPlayer$1(PlayerList.java:305) ~[paper-1.18.1.jar:git-Paper-200]
at net.minecraft.server.network.ServerGamePacketListenerImpl.tick(ServerGamePacketListenerImpl.java:305) ~[?:?]
at net.minecraft.network.Connection.tick(Connection.java:526) ~[?:?]
at net.minecraft.server.network.ServerConnectionListener.tick(ServerConnectionListener.java:201) ~[?:?]
at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1636) ~[paper-1.18.1.jar:git-Paper-200]
at net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:480) ~[paper-1.18.1.jar:git-Paper-200]
at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1470) ~[paper-1.18.1.jar:git-Paper-200]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1264) ~[paper-1.18.1.jar:git-Paper-200]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317) ~[paper-1.18.1.jar:git-Paper-200]
at java.lang.Thread.run(Thread.java:833) ~[?:?]

[Bug] Cannot ban a player who is offline

Even though the player has joined the server, it doesn't allow me to ban them unless they are online. Only outcome it gives me is that "This player does not exist."

GUI errors when trying to go back in certain out of the box menus.

Console throwing errors when trying to use the closing GUI item on certain our of the box modules.
Server software is Paper 1.16.5 latest - Staff++ 1.16.102.

In order to reproduce the issue:

  • Have a Dummy Player around and warn him once. (warn details are irrelevant)
  • Start the staffmode via /staff.
  • Access the player-details-module in the provided toolbar. (Dummy Player needs to be close)
  • Access the warnings history.
  • Select one warning to view the details of.
  • Take no action on the warning, just go back.
  • Attempt to go back one more time - to the player-details-module GUI.
  • There it is, complete loss of functionality until GUI resets.

Note: Same happens for multiple parts of the default GUI, this is just an example that I chose to provide as example.

[02:13:41] [Server thread/ERROR]: Could not pass event InventoryClickEvent to StaffPlus v1.16.102
net.shortninja.staffplus.core.be.garagepoort.mcioc.IocException: Mc-Ioc bean exceptions: [Unable to execute gui action]
	at net.shortninja.staffplus.core.be.garagepoort.mcioc.gui.GuiActionService.executeAction(GuiActionService.java:107) ~[?:?]
	at net.shortninja.staffplus.core.be.garagepoort.mcioc.gui.InventoryClick.lambda$onClick$0(InventoryClick.java:38) ~[?:?]
	at java.util.Optional.ifPresent(Optional.java:178) ~[?:?]
	at net.shortninja.staffplus.core.be.garagepoort.mcioc.gui.InventoryClick.onClick(InventoryClick.java:28) ~[?:?]
	at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor745.execute(Unknown Source) ~[?:?]
	at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.5.jar:git-Paper-792]
	at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.16.5.jar:git-Paper-792]
	at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.5.jar:git-Paper-792]
	at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:2715) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.PacketPlayInWindowClick.a(SourceFile:32) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.PacketPlayInWindowClick.a(SourceFile:10) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:35) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1271) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1264) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1225) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1139) ~[patched_1.16.5.jar:git-Paper-792]
	at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-792]
	at java.lang.Thread.run(Thread.java:831) [?:?]
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
	at net.shortninja.staffplus.core.be.garagepoort.mcioc.gui.actionquery.ActionQueryParser.getParams(ActionQueryParser.java:61) ~[?:?]
	at net.shortninja.staffplus.core.be.garagepoort.mcioc.gui.GuiActionService.executeAction(GuiActionService.java:87) ~[?:?]
	... 23 more

examine module does not check perms

Is there a way to remove freeze and view IP address temporarily from the examine module inside the modules.yml?
With each reboot of the server the two entries are back in the file.
Removing them was a try to limit access as they're not allowed for a certain rank on our server. Which is working as intended if they use the command (they cannot do it), but it's still working for them inside /examine. Same for the IP address.
Can you add a check for the right perms?

[FEATURE REQUEST]

It would be nice to have a support ticket command, such as /ticket create (ticket description). That would be a lot nicer than using the report command for support tickets, and I cannot seem to find any commands for support tickets, which Staff+ did have if I recall.

errors on server start

First error:

[14:26:24 ERROR]: [StaffPlus] [STDERR] log4j:WARN No appenders could be found for logger (net.shortninja.staffplus.core.be.garagepoort.mcioc.org.reflections.Reflections).
[14:26:24 WARN]: Nag author(s): '[Shortninja,Qball,Garagepoort]' of 'StaffPlus' about their usage of System.out/err.print. Please use your plugin's logger instead (JavaPlugin#getLogger).
[14:26:24 ERROR]: [StaffPlus] [STDERR] log4j:WARN Please initialize the log4j system properly.
[14:26:24 ERROR]: [StaffPlus] [STDERR] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

second error:

[14:26:30 ERROR]: Error occurred while enabling StaffPlus v1.18.12 (Is it up to date?)
net.shortninja.staffplus.core.be.garagepoort.mcioc.IocException: Mc-Ioc bean exceptions: [Cannot instantiate bean with type net.shortninja.staffplus.core.application.database.DatabaseInitializer.]
at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.createBean(IocContainer.java:248) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.instantiateBean(IocContainer.java:212) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.loadIocBeans(IocContainer.java:78) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.init(IocContainer.java:49) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.be.garagepoort.mcioc.TubingPlugin.onEnable(TubingPlugin.java:38) ~[staffplusplus-core-1.18.12.jar:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:535) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_18_R2.CraftServer.enablePlugin(CraftServer.java:560) ~[paper-1.18.2.jar:git-Paper-295]
at org.bukkit.craftbukkit.v1_18_R2.CraftServer.enablePlugins(CraftServer.java:474) ~[paper-1.18.2.jar:git-Paper-295]
at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:664) ~[paper-1.18.2.jar:git-Paper-295]
at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:431) ~[paper-1.18.2.jar:git-Paper-295]
at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:316) ~[paper-1.18.2.jar:git-Paper-295]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1163) ~[paper-1.18.2.jar:git-Paper-295]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:315) ~[paper-1.18.2.jar:git-Paper-295]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: java.lang.reflect.InvocationTargetException
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?]
at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.createBean(IocContainer.java:243) ~[staffplusplus-core-1.18.12.jar:?]
... 15 more
Caused by: net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:595) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:581) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:81) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.migrations.mysql.MySQLConnectionProvider.getDataSource(MySQLConnectionProvider.java:77) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.migrations.mysql.MySQLConnectionProvider.getDatasource(MySQLConnectionProvider.java:40) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.migrations.mysql.MySQLConnectionProvider.getConnection(MySQLConnectionProvider.java:58) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.be.garagepoort.mcsqlmigrations.Migrations.createMigrationTableMysql(Migrations.java:48) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.be.garagepoort.mcsqlmigrations.Migrations.run(Migrations.java:25) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.DatabaseInitializer.(DatabaseInitializer.java:20) ~[staffplusplus-core-1.18.12.jar:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?]
at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.createBean(IocContainer.java:243) ~[staffplusplus-core-1.18.12.jar:?]
... 15 more
Caused by: java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:898) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:823) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:81) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.migrations.mysql.MySQLConnectionProvider.getDataSource(MySQLConnectionProvider.java:77) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.migrations.mysql.MySQLConnectionProvider.getDatasource(MySQLConnectionProvider.java:40) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.migrations.mysql.MySQLConnectionProvider.getConnection(MySQLConnectionProvider.java:58) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.be.garagepoort.mcsqlmigrations.Migrations.createMigrationTableMysql(Migrations.java:48) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.be.garagepoort.mcsqlmigrations.Migrations.run(Migrations.java:25) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.DatabaseInitializer.(DatabaseInitializer.java:20) ~[staffplusplus-core-1.18.12.jar:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?]
at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.createBean(IocContainer.java:243) ~[staffplusplus-core-1.18.12.jar:?]
... 15 more
Caused by: com.mysql.cj.exceptions.CJException: Access denied for user 'u9211_k4X9IuH4lG'@'%' to database 's9211_HUB_STAFFPLUSPLUS'
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:129) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:787) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:709) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:677) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:137) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:468) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:210) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1369) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.NativeSession.connect(NativeSession.java:133) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:842) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:823) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.27.jar:8.0.27]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.HikariDataSource.(HikariDataSource.java:81) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.migrations.mysql.MySQLConnectionProvider.getDataSource(MySQLConnectionProvider.java:77) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.migrations.mysql.MySQLConnectionProvider.getDatasource(MySQLConnectionProvider.java:40) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.migrations.mysql.MySQLConnectionProvider.getConnection(MySQLConnectionProvider.java:58) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.be.garagepoort.mcsqlmigrations.Migrations.createMigrationTableMysql(Migrations.java:48) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.be.garagepoort.mcsqlmigrations.Migrations.run(Migrations.java:25) ~[staffplusplus-core-1.18.12.jar:?]
at net.shortninja.staffplus.core.application.database.DatabaseInitializer.(DatabaseInitializer.java:20) ~[staffplusplus-core-1.18.12.jar:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?]
at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.createBean(IocContainer.java:243) ~[staffplusplus-core-1.18.12.jar:?]
... 15 more

[bug] exception related to luckperms api, context calculation

The problem

When a new player, never seen before joins my server. I'm seeing this in the logs:

I also have steps to reproduce down below.

[20:19:13 INFO]: UUID of player HarmWasTaken is 81b521bf-ec53-46a5-a64c-bec0d9cee0d0 [20:19:13 WARN]: [LuckPerms] An exception was thrown by net.shortninja.staffplus.staff.mode.StaffModeLuckPermsContextCalculator whilst calculating the context of subject CraftPlayer{name=HarmWasTaken} [20:19:13 WARN]: java.lang.RuntimeException: Trying to instantiate session for offline user [20:19:13 WARN]: at net.shortninja.staffplus.session.SessionLoader.buildNewSession(SessionLoader.java:45) [20:19:13 WARN]: at net.shortninja.staffplus.session.SessionLoader.loadSession(SessionLoader.java:39) [20:19:13 WARN]: at net.shortninja.staffplus.session.SessionManager.get(SessionManager.java:31) [20:19:13 WARN]: at net.shortninja.staffplus.staff.mode.StaffModeLuckPermsContextCalculator.calculate(StaffModeLuckPermsContextCalculator.java:19) [20:19:13 WARN]: at net.shortninja.staffplus.staff.mode.StaffModeLuckPermsContextCalculator.calculate(StaffModeLuckPermsContextCalculator.java:9) [20:19:13 WARN]: at me.lucko.luckperms.common.context.ContextManager.calculate(ContextManager.java:138) [20:19:13 WARN]: at me.lucko.luckperms.common.context.QueryOptionsCache.supply(QueryOptionsCache.java:54) [20:19:13 WARN]: at me.lucko.luckperms.common.context.QueryOptionsCache.supply(QueryOptionsCache.java:42) [20:19:13 WARN]: at me.lucko.luckperms.common.cache.ExpiringCache.get(ExpiringCache.java:64) [20:19:13 WARN]: at me.lucko.luckperms.common.context.QueryOptionsCache.getQueryOptions(QueryOptionsCache.java:59) [20:19:13 WARN]: at me.lucko.luckperms.bukkit.inject.permissible.LuckPermsPermissible.hasPermission(LuckPermsPermissible.java:175) [20:19:13 WARN]: at org.bukkit.craftbukkit.v1_16_R3.entity.CraftHumanEntity.hasPermission(CraftHumanEntity.java:206) [20:19:13 WARN]: at me.egg82.antivpn.events.PlayerLoginUpdateNotifyHandler.accept(PlayerLoginUpdateNotifyHandler.java:31) [20:19:13 WARN]: at me.egg82.antivpn.AntiVPN.lambda$loadEvents$9(AntiVPN.java:360) [20:19:13 WARN]: at me.egg82.antivpn.external.ninja.egg82.events.SingleEventSubscriber.call(SingleEventSubscriber.java:101) [20:19:13 WARN]: at me.egg82.antivpn.external.ninja.egg82.events.BukkitEventSubscriber.call(BukkitEventSubscriber.java:50) [20:19:13 WARN]: at me.egg82.antivpn.external.ninja.egg82.events.BukkitEventSubscriber.lambda$new$0(BukkitEventSubscriber.java:31) [20:19:13 WARN]: at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) [20:19:13 WARN]: at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) [20:19:13 WARN]: at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:607) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.PlayerList.attemptLogin(PlayerList.java:677) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.LoginListener.c(LoginListener.java:148) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.LoginListener.tick(LoginListener.java:66) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.NetworkManager.a(NetworkManager.java:564) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.ServerConnection.c(ServerConnection.java:150) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.b(MinecraftServer.java:1443) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:378) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1268) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1000) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:174) [20:19:13 WARN]: at java.base/java.lang.Thread.run(Thread.java:832) [20:19:13 WARN]: [LuckPerms] An exception was thrown by net.shortninja.staffplus.staff.mode.StaffModeLuckPermsContextCalculator whilst calculating the context of subject CraftPlayer{name=HarmWasTaken} [20:19:13 WARN]: java.lang.RuntimeException: Trying to instantiate session for offline user [20:19:13 WARN]: at net.shortninja.staffplus.session.SessionLoader.buildNewSession(SessionLoader.java:45) [20:19:13 WARN]: at net.shortninja.staffplus.session.SessionLoader.loadSession(SessionLoader.java:39) [20:19:13 WARN]: at net.shortninja.staffplus.session.SessionManager.get(SessionManager.java:31) [20:19:13 WARN]: at net.shortninja.staffplus.staff.mode.StaffModeLuckPermsContextCalculator.calculate(StaffModeLuckPermsContextCalculator.java:19) [20:19:13 WARN]: at net.shortninja.staffplus.staff.mode.StaffModeLuckPermsContextCalculator.calculate(StaffModeLuckPermsContextCalculator.java:9) [20:19:13 WARN]: at me.lucko.luckperms.common.context.ContextManager.calculate(ContextManager.java:138) [20:19:13 WARN]: at me.lucko.luckperms.common.context.QueryOptionsCache.supply(QueryOptionsCache.java:54) [20:19:13 WARN]: at me.lucko.luckperms.common.context.QueryOptionsCache.supply(QueryOptionsCache.java:42) [20:19:13 WARN]: at me.lucko.luckperms.common.cache.ExpiringCache.get(ExpiringCache.java:64) [20:19:13 WARN]: at me.lucko.luckperms.common.context.QueryOptionsCache.getQueryOptions(QueryOptionsCache.java:59) [20:19:13 WARN]: at me.lucko.luckperms.bukkit.inject.permissible.LuckPermsPermissible.hasPermission(LuckPermsPermissible.java:175) [20:19:13 WARN]: at org.bukkit.craftbukkit.v1_16_R3.entity.CraftHumanEntity.hasPermission(CraftHumanEntity.java:206) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.CommandListenerWrapper.hasPermission(CommandListenerWrapper.java:167) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.CommandListenerWrapper.hasPermission(CommandListenerWrapper.java:156) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.CommandAdvancement.a(SourceFile:36) [20:19:13 WARN]: at com.mojang.brigadier.tree.CommandNode.canUse(CommandNode.java:79) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.CommandDispatcher.a(CommandDispatcher.java:303) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.CommandDispatcher.sendAsync(CommandDispatcher.java:261) [20:19:13 WARN]: at net.minecraft.server.v1_16_R3.CommandDispatcher.lambda$a$4(CommandDispatcher.java:250) [20:19:13 WARN]: at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1429) [20:19:13 WARN]: at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) [20:19:13 WARN]: at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1016) [20:19:13 WARN]: at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1665) [20:19:13 WARN]: at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1598) [20:19:13 WARN]: at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177) [20:19:13 WARN]: [StaffPlus] Player is has no modedata stored. Cannot remove mode.

Steps to reproduce

  1. configure a 1.16.5 minecraft server
  2. install LuckPerms-Bukkit-5.2.76.jar and staffplusplus-core-1.16.44.jar (the default configs are used)
  3. launch the server and run "/whitelist off"
  4. join the server
  5. observe a similar exception to the one shown above in the server console

Notes

  • This happens only upon first join. subsequent joins do not throw this error.
  • In the absense of LuckPerms, this error does not happen.
  • Was also tested on LuckPerms-Bukkit-5.1.93.jar and staffplusplus-core-1.17.0.jar (compiled from latest master) and produced the same error
  • You can cause this error to occur again by killing the server, deleting plugins/StaffPlus/data.yml and restarting the server.

GUI Rework Suggestions/Discussion

This feature request is more of a collection of user suggestions to consider when/if an entire GUI rework ever comes to the table. Most of the suggestions involve removing almost everything that is currently in the hot bar, either completely, or moving into deeper GUI levels. The end result leaves the HOT BAR with only 5 used slots, freeing up slots for me to add things like an inspector wand from CoreProtect and other plugin tools my admins use. Hope these suggestions will be useful and maybe spark some discussion.

  1. I like the current STAFF option, but it’s so limiting. I’d rather see PLAYERS and have that open a GUI for deeper filtering. STAFF would move to this filtering menu along with these possible options: PLAYERS, STAFF, MINERS, BANS, MUTES, etc…
  • Each of these options then opens a deeper GUI option with relevant details. So for instance PLAYERS could have a list of player heads that can be hovered over for more details (customizable and shown as lore)(and sorted by ONLINE/OFFLINE). Default details might be the players: NAME:RANK, IP, WORLD:LOCATION, HRS PLAYED, etc….

  • Clicking on a specific player head could open a player specific GUI. This would be where most of the current Hot Bar tools (TeleportTo, TeleportHere, Enderchest, CPS, Freeze, Follow, Examine?) could move to along with new tools such as Protect Player. Allowing admins to preform those actions on that player. This could also house actions like viewing a players infraction history or current reports, etc.

  • Finally, one additional NEW tool could be added to the hot bar that would be a player selector wand. This wand would maintain the old functionality of clicking on a player in game and preforming the action of opening that player GUI mentioned above. From there the staff member could then select further actions (the old actions) to preform on the player.

  1. HUB GUI: There have been some good changes here, but there are a lot of new modules that aren’t reflected here and still exist only by commands. This should be a menu for all those BAN, MUTE, REPORT, INVESTIGATIONS, etc… that then have their own GUI that expands from this menu.

  2. VANISH: Does the On/Off indicator still work on this? The new GLOW INK would be a great on/off indicator for this.

  3. CHEST INSPECTOR: so admins can still open/check chests. (EDIT this is currently called EXAMINE and is a chest icon)

  4. RANDOM TELEPORT: Meh, keep or remove, I don’t really use it, but we can remove it from our end.

  5. REMOVE: Compass/Launcher since we can already fly and most people have elytra/rockets. At the very least change the icon to a rocket or an elytra.

  6. MOVE Enderchest, CPS, Freeze, Follow, Examine to the PLAYER GUI (see above)

Wont load on 1.17.1

10.07 18:52:57 [Server] INFO [StaffPlus] Enabling StaffPlus v1.17.6
10.07 18:52:57 [Server] INFO [StaffPlus] Staff++ has been enabled!
10.07 18:52:57 [Server] INFO [StaffPlus] Plugin created by Shortninja continued by Qball - Revisited by Garagepoort
10.07 18:52:57 [Server] INFO [net.shortninja.staffplus.core.be.garagepoort.mcioc.org.reflections.Reflections] Reflections took 106 ms to scan 1 urls, producing 147 keys and 1043 values
10.07 18:52:57 [Server] ERROR Error occurred while enabling StaffPlus v1.17.6 (Is it up to date?)
10.07 18:52:57 [Server] INFO net.shortninja.staffplus.core.be.garagepoort.mcioc.IocException: Mc-Ioc bean exceptions: [Cannot instantiate bean with interface net.shortninja.staffplus.core.be.garagepoort.mcsqlmigrations.SqlConnectionProvider. No classes implementing this interface]
10.07 18:52:57 [Server] INFO at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.instantiateBean(IocContainer.java:171) ~[?:?]
10.07 18:52:57 [Server] INFO at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.buildParams(IocContainer.java:250) ~[?:?]
10.07 18:52:57 [Server] INFO at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.createBean(IocContainer.java:202) ~[?:?]
10.07 18:52:57 [Server] INFO at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.instantiateBean(IocContainer.java:178) ~[?:?]
10.07 18:52:57 [Server] INFO at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.loadIocBeans(IocContainer.java:61) ~[?:?]
10.07 18:52:57 [Server] INFO at net.shortninja.staffplus.core.be.garagepoort.mcioc.IocContainer.init(IocContainer.java:37) ~[?:?]
10.07 18:52:57 [Server] INFO at net.shortninja.staffplus.core.be.garagepoort.mcioc.TubingPlugin.onEnable(TubingPlugin.java:17) ~[?:?]
10.07 18:52:57 [Server] INFO at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:304) ~[?:?]
10.07 18:52:57 [Server] INFO at com.rylinaux.plugman.command.LoadCommand.execute(LoadCommand.java:114) ~[?:?]
10.07 18:52:57 [Server] INFO at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:95) ~[?:?]
10.07 18:52:57 [Server] INFO at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at org.bukkit.craftbukkit.v1_17_R1.CraftServer.dispatchCommand(CraftServer.java:821) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at net.minecraft.server.network.ServerGamePacketListenerImpl.handleCommand(ServerGamePacketListenerImpl.java:2170) ~[?:?]
10.07 18:52:57 [Server] INFO at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:1981) ~[?:?]
10.07 18:52:57 [Server] INFO at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:1962) ~[?:?]
10.07 18:52:57 [Server] INFO at net.minecraft.network.protocol.game.ServerboundChatPacket.handle(ServerboundChatPacket.java:46) ~[?:?]
10.07 18:52:57 [Server] INFO at net.minecraft.network.protocol.game.ServerboundChatPacket.handle(ServerboundChatPacket.java:6) ~[?:?]
10.07 18:52:57 [Server] INFO at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:36) ~[?:?]
10.07 18:52:57 [Server] INFO at net.minecraft.server.TickTask.run(TickTask.java:18) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[?:?]
10.07 18:52:57 [Server] INFO at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:23) ~[?:?]
10.07 18:52:57 [Server] INFO at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1348) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at net.minecraft.server.MinecraftServer.shouldRun(MinecraftServer.java:190) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:122) ~[?:?]
10.07 18:52:57 [Server] INFO at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1327) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1320) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:132) ~[?:?]
10.07 18:52:57 [Server] INFO at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1397) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1188) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:316) ~[patched_1.17.1.jar:git-Paper-97]
10.07 18:52:57 [Server] INFO at java.lang.Thread.run(Thread.java:831) [?:?]
10.07 18:52:57 [Server] INFO [StaffPlus] Disabling StaffPlus v1.17.6
10.07 18:52:57 [Server] INFO [StaffPlus] Staff++ is now disabling!
10.07 18:52:57 [Server] INFO [StaffPlus] Staff++ disabled!

Several bundled libraries are not relocated

If you open up the StaffPlus jar, you will see many dependencies, such as:

com/google/gson/
org/apache/commons/lang/
me/rayzr522/jsonmessage/
de/tr7zw/nbtinjector/
org/json/simple/

These need to be relocated for the purpose of compatibility with other plugins. If other plugins include the same dependencies, conflict will result. As the CraftBukkit wiki describes:

Plugins should relocate their dependencies to avoid conflicts between plugins, which may result in nausea, vomiting, upset stomach, and/or death unintended behavior or exceptions
https://bukkit.fandom.com/wiki/Using_External_Libraries_with_Plugins

I noticed that you already relocate NBTAPI. You need to do the same for the other libraries, too.

StaffPlusPlus/pom.xml

Lines 283 to 286 in 870fc9e

<relocation>
<pattern>de.tr7zw.nbtapi.</pattern>
<shadedPattern>net.shortninja.staffplus.core.de.tr7zw.nbtapi.</shadedPattern>
</relocation>

refactor: api for discord templates

I want to suggest changing the names for the API to the following to standardise the entire thing, making it easier to create templates.

eventName:
  target:
    - name
    - Uuid
    - matchedName
    - matchedUuid
  
  staff:
    - name
    - uuid
  
  reason: 
    - created
    - resolved
   
  warnings:
    - severity
    - staff
    - reason 

  details: 
    - endDate
    - type
    - status
    - location
    - serverName
    - thresholdScore
    - commandsTriggered
    - severity

example usage: 
  bans.reason.created
  warnings.target.name

This is broken down and made up from the following spec:

altdetects: 
  - target:
    # general
    - name # user who was checked for matches (replaces checkedName)
    - uuid # (replaces checkedUuid)

    # alt detect
    - matchedName # user who matched with another player
    - matchedUuid # Uuid for above user

appeals: 
  - target:
    - name # user who is appealing (replaces appealerName)
    - uuid # (replaces appealerUuid)

  staff: 
    - name # the user who is taking this action (replaces resolverName)
    - uuid # (replaces resolverUuid)

  - reason:
    - created # the reason for the appeal when it was opened (replaces reason)
    - resolved # the reason for resolving the appeal (replaces resolveReason.get())
  
  - warnings: 
    - severity # the severity of latest warning
    - staff    # the staff member who issued warning
    - reason   # the reason for warning

bans: 
  - target:
    - name # user who is banned (replaces targetName)
    - uuid # (replaces targetUuid)

  staff: 
    - name # the user who is taking this action (replaces issuerName)
    - uuid # (replaces issuerUuid)

  - reason:
    - created # the reason for the ban when it was issued (replaces reason)
    - resolved # the reason for unbanning the user (replaces unbanReason)
  
  - details: 
    - endDate # same as previous versions

kicks: 
  - target:
    - name # user who is kicked (replaces targetName)
    - uuid # (replaces targetUuid)

  staff: 
    - name # the user who is taking this action (replaces issuerName)
    - uuid # (replaces issuerUuid)

  - reason:
    - created # the reason for the ban when it was issued (replaces reason)
    - resolved # the reason for unbanning the user (replaces unbanReason)

mutes: 
  - target:
    - name # user who is muted (replaces targetName)
    - uuid # (replaces targetUuid)

  staff: 
    - name # the user who is taking this action (replaces issuerName)
    - uuid # (replaces issuerUuid)

  - reason:
    - created # the reason for the ban when it was issued (replaces reason)
    - resolved # the reason for unbanning the user (replaces unbanReason)
  
  details: 
    - endDate # same as previous versions

reports: 
  - target:
    - name (replaces reporterName)
    - uuid
  
  - culprit:
    - name (replaces culpritName)
    - uuid
  
  - reason:
    - created (replaces reason)
    - resolved (replaces closeReason)

  details: 
    - type (not implemented yet?!)
    - status (replaces reportStatus)
    - location (replaces location)

staffmode: 
  - staff:
    - name # (replace playerName)
    - uuid
  
  details:
    - serverName
    - location


threshold: 
  - target: 
    - name # (replaces playerName)
    - uuid

  details:
    - thresholdScore
    - commandsTriggered
  
warnings:
  - target:
    - name (replaces reporterName)
    - uuid

  - staff:
    - name # (replace playerName)
    - uuid

  - reason:
    - created (replaces reason)

  - details: 
    - severity

[feature request] add coordinates to reports

When a player runs /report or /reportplayer it is very important for staff to know where the report was submitted. in-game it would be good to have a teleport button inside of the report to teleport to where the report was logged.

the coords should be shown in the tooltip when you hover over the player head.

the discord webhooks messages should also include the coords.

Plugin StaffPlus v1.16.49 generated an exception while executing task 556

Heya, I'm getting some errors when attempting to use this application with SpigotPaper 1.16.5 using MySQL synchronisation

02.03 11:17:17 [Server] WARN [StaffPlus] Plugin StaffPlus v1.16.49 generated an exception while executing task 556
02.03 11:17:17 [Server] INFO java.lang.RuntimeException: java.sql.SQLException: No value specified for parameter 1
02.03 11:17:17 [Server] INFO at net.shortninja.staffplus.staff.warn.warnings.database.AbstractSqlWarnRepository.expireWarnings(AbstractSqlWarnRepository.java:162) ~[?:?]
02.03 11:17:17 [Server] INFO at net.shortninja.staffplus.staff.warn.warnings.WarnService.lambda$expireWarnings$7(WarnService.java:145) ~[?:?]

Here's my config:

# Staff++ | Made with love by Shortninja and continued by Qball - Revisited by Garagepoort
# 
# If you're having trouble with item type names, refer to here: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html
# All item slots are how they "should be", meaning the first slot of an inventory will be one. Maximum is 36.

staff-mode:
  cps-module:
    lore: '&7Runs a click per second test on, &7the player that was clicked.'
    item: CLOCK
    enabled: true
    max: 16.0
    slot: 7
    name: '&3CPS'
    time: 10
  gui-module:
    name: '&eGUI Hub'
    miner-name: '&bMiner GUI'
    reports-title: '&bUnresolved reports'
    miner-title: '&bUnderground users'
    slot: 4
    closed-reports-title: '&bClosed reports'
    mute-gui: true
    mute-lore: '&7Shows all currently muted players.'
    mute-title: '&bOverview muted players'
    ban-name: '&bBanned players GUI'
    protected-areas-gui: true
    reports-name: '&bUnresolved reports GUI'
    miner-lore: '&7Shows all players under the set Y value.'
    xray-level: 16
    reports-lore: '&7Shows all open reports.'
    protected-areas-title: '&bOverview protected areas'
    protected-areas-name: '&bProtected Areas GUI'
    my-reports-lore: '&7Shows reports currently assigned to you.'
    miner-gui: true
    ban-title: '&bOverview banned players'
    protected-areas-lore: '&7Shows all currently set protected areas.'
    reports-gui: true
    ban-gui: true
    mute-name: '&bMuted players GUI'
    ban-lore: '&7Shows all currently banned players.'
    closed-reports-lore: '&7History of all closed reports.'
    lore: '&7Opens the GUI hub.'
    my-reports-title: '&bReports assigned to you'
    enabled: true
    item: PAPER
  vanish-module:
    lore: '&7Toggles your total vanish.'
    item: INK:10
    slot: 3
    name: '&6Vanish'
    item-off: INK:8
    enabled: true
  freeze-module:
    item: BLAZE_ROD
    lore: '&7Toggles freeze for the clicked player.'
    chat: true
    slot: 6
    prompt: false
    sound: ORB_PICKUP
    name: '&2Freeze'
    damage: false
    prompt-title: '&bFrozen'
    enabled: true
    logout-commands: ban %player%
    timer: 5
  inventory-interaction: true
  invincible: true
  random-teleport-module:
    item: ENDEREYE
    lore: '&7Teleports you to a random player.'
    name: '&cRandom Teleport'
    enabled: true
    slot: 2
    random: false
  vanish-type: TOTAL
  follow-module:
    item: LEAD
    slot: 9
    name: '&9Follow'
    lore: '&7Mounts the player that was clicked.'
    enabled: true
  examine-module:
    lore: '&7Inspects the inventory of the player that was clicked.'
    info-line:
      notes: 7
      food: 1
      infractions: 5
      gamemode: 4
      location: 6
      warn: 9
      ip-address: 2
      ping: 3
      freeze: 8
    item: CHEST
    title: '&bExamine inventory'
    enabled: true
    name: '&bExamine'
    slot: 8
  enable-on-login: false
  creative: true
  counter-module:
    lore: '&7Shows all staff online and in staff mode'
    item: HEAD
    slot: 5
    title: '&bCurrent staff online'
    name: '&aStaff List'
    show-staff-mode: false
    enabled: true
  compass-module:
    velocity: 5
    slot: 1
    lore: '&7Launches you towards the, &7location you are facing.'
    enabled: true
    name: '&4Launcher'
    item: COMPASS
  silent-chest-interaction: true
  hunger-loss: false
  damage: false
  enable-commands: example1 %player%, example2 %player%
  disable-on-world-change: false
  staff-see-staff-in-mode: true
  item-pickup: true
  disable-on-logout: true
  original-location: false
  flight: true
  disable-commands: example1 %player%, example2 %player%
  item-drop: false
  block-manipulation: false
commands:
  changePass: changepassword
  reports:
    manage:
      gui: manage-reports
      cli: reports
  my-reports: my-reports
  login: login
  staff-list: personnel
  infractions-top-view: infractions-top
  warnings:
    manage:
      gui: manage-warnings
      appealed-gui: manage-appealed-warnings
  infractions-view: infractions
  protect-area: protectArea
  freeze: freeze
  cps: cps
  alt-detect-whitelist: altWhitelist
  resetPass: resetPassword
  kick: kick
  strip: strip
  echest_view: eview
  broadcast: broadcast
  protect-player: protectPlayer
  mute: mute
  staff-mode: staff
  follow: follow
  register: register
  chat: chat
  ban: ban
  tempban: tempban
  my-warnings: my-warnings
  vanish: vanish
  teleport-to-location: teleportToLocation
  clearInv: clear
  teleport-back: teleportBack
  warns: warns
  unban: unban
  warn: warn
  ticket: ticket
  trace: trace
  notes: notes
  alerts: alerts
  tempmute: tempmute
  teleport-to-player: teleportToPlayer
  revive: revive
  report: report
  unmute: unmute
  reportPlayer: reportPlayer
  staff-chat: sc
  examine: examine
  teleport-here: teleportHere
storage:
  type: 'mysql'
  mysql:
    host: 'mcdbs.ggservers.com'
    user: 'user_154315'
    database: 'user_154315'
    password: '[redacted]'
    port: 3306
server-sync-module:
  staffmode-sync: false
  report-sync: true
  ban-sync: true
  warning-sync: true
  kick-sync: true
  mute-sync: true
  vanish-sync: true
permissions:
  enderchests:
    interact: staff.enderchests.interact
    view:
      online: staff.enderchests.view.online
      offline: staff.enderchests.view.offline
  reports:
    manage:
      accept: staff.reports.manage.accept
      resolve: staff.reports.manage.resolve
      delete: staff.reports.manage.delete
      teleport: staff.reports.manage.teleport
      reject: staff.reports.manage.reject
      view: staff.reports.manage.view
  mute-bypass: staff.staffplus.mute-bypass
  examine-view-inventory:
    offline: staff.examine.view-inventory-offline
    online: staff.examine.view-inventory
  warnings:
    manage:
      expire: staff.warnings.manage.expire
      view: staff.warnings.manage.view
      delete: staff.warnings.manage.delete
    appeals:
      notifications: staff.warnings.appeals.notifications
      approve: staff.warnings.appeals.approve
      create-others: staff.warnings.appeals.create.others
      reject: staff.warnings.appeals.reject
      create: staff.warnings.appeals.create
  name-change: staff.alerts.namechange
  compass: staff.compass
  vanish: staff.vanish
  gui: staff.gui
  ipPerm: staff.staffplus.hideip
  follow: staff.follow
  teleport-here: staff.teleport-here
  counter: staff.counter
  counter-show-vanished: staff.counter-show-vanished
  alt-detect-bypass: staff.staffplus.alt-detect-bypass
  protect-player: staff.staffplus.protect-player
  report-update-notifications: staff.report.update.notifications
  alt-detect-whitelist: staff.staffplus.alt-detect-whitelist
  trace: staff.trace
  report-bypass: staff.report.bypass
  invClear: staff.staffplus.clearinv
  tickets: staff.tickets
  random-teleport: staff.random-teleport
  revive: staff.revive
  trace-bypass: staff.trace.bypass
  teleport-to-player: staff.teleport-to-player
  report: staff.report
  cps: staff.cps
  chat-clear: staff.chat.clear
  warn-bypass: staff.warn.bypass
  staff-chat: staff.staffchat
  mode-silent-chest-interaction: staff.mode.silent-chest-interaction
  examine: staff.examine
  broadcast: staff.staffplus.broadcast
  alerts-alt-detect: staff.alerts.alt-detects
  staffplus: staff.staffplus
  xray: staff.alerts.xray
  kick-bypass: staff.staffplus.kick-bypass
  lockdown: staff.lockdown
  chat-slow: staff.chat.slow
  blacklist: staff.blacklist
  resetPass: staff.staffplus.resetpassword
  infractions:
    view: staff.infractions.view
  protect-area: staff.staffplus.protect-area
  teleport-bypass: staff.teleport.bypass
  wild-card: staff.*
  vanish-total: staff.vanish.total
  tp: staff.tp
  unmute: staff.staffplus.unmute
  unban: staff.staffplus.unban
  ban-bypass: staff.staffplus.ban-bypass
  invClear-bypass: staff.staffplus.clearinv-bypass
  mode: staff.mode
  freeze-bypass: staff.freeze.bypass
  mention: staff.alerts.mention
  alerts: staff.staffplus.alerts
  strip: staff.strip
  mute: staff.staffplus.mute
  member: staff.member
  kick: staff.staffplus.kick
  teleport-to-location: staff.teleport-to-location
  vanish-list: staff.vanish.list
  warn: staff.warn
  view-my-reports: staff.report.view-my-reports
  freeze: staff.freeze
  examine-inventory-interaction:
    online: staff.examine.inventory-interaction
    offline: staff.examine.inventory-interaction-offline
  view-my-warnings: staff.warn.view-my-warnings
  chat-toggle: staff.chat.toggle
  ban: staff.staffplus.ban
  block: staff.block
chat-module:
  slow: 5
  blacklist-module:
    character: '*'
    enabled: false
    allowed: bypass, assembly, assassin, compass, assume, assault, asset, assort
    merging: true
    periods: (), (dot),
    characters: 卐, 卍
    words: fuck, shit, ass, bitch, dick, cock, piss, cunt, fag, faggot, slut, nigger,
      nigga
    hoverable: false
    domains: com, net, org
  enabled: true
  lines: 100
mute-module:
  enabled: true
infractions-module:
  bans-gui-item: PAPER
  mutes-gui-item: PAPER
  enabled: true
  show-mutes: true
  kicks-gui-item: PAPER
  show-reported: true
  show-bans: true
  warnings-gui-item: PAPER
  show-warnings: true
  reported-gui-item: PAPER
  show-kicks: true
reports-module:
  reporter-notifications:
    notify-on-join: true
    status-change-notifications: IN_PROGRESS;RESOLVED;REJECTED
  cooldown: 10
  closing-reason-enabled: true
  show-reporter: true
  enabled: true
  sound: ORB_PICKUP
vanish-module:
  vanish-message-enabled: true
  suggestions: true
  tab-list: true
  show-away: false
  chat: true
  enabled: true
metrics: true
alerts-module:
  xray-alerts:
    blocks: SPAWNER, EMERALD_ORE, DIAMOND_ORE, GOLD_ORE, IRON_ORE, COAL_ORE, LAPIS_ORE,
      REDSTONE_ORE
    enabled: true
  mention-notify: true
  alt-detect-notify:
    trust-levels: FAIRLY_POSITIVE;POSITIVE
    enabled: true
  name-notify: true
  sound: ORB_PICKUP
warnings-module:
  user-notifications:
    enabled: true
    always-notify: false
  thresholds:
  - score: 13
    actions:
    - command: ban %player% &4Warning threshold has been met
      run-strategy: ALWAYS
  severity-levels:
  - name: MINOR
    score: 1
    expiresAfter: 1 WEEK
  - name: MAJOR
    score: 3
    expiresAfter: 1 MONTH
  - name: CRITICAL
    score: 5
  actions: []
  sound: ORB_PICKUP
  show-issuer: true
  enabled: true
  appeals:
    reasons:
    - ''
    enabled: true
    fixed-reason: true
    resolve-reason-enabled: true
sound-names: random.chestopen, random.chestclosed
blocked-mode-commands: /example1, /example2, /example3
protect-module:
  area-max-size: 40
  player-enabled: true
  area-enabled: true
glass-title: '&bChoose GUI glass color'
glass-color: 0
alt-detect-module:
  enabled: true
staff-chat-module:
  handle: '@'
  enabled: true
  bungee: true
main-world: world
clock: 2
offline-players-mode: true
trace-module:
  enabled: true
  trace-events: PICKUP_ITEM;DROP_ITEM;BLOCK_BREAK;BLOCK_PLACE;COMMANDS;CHAT;WORLD_CHANGE;INVENTORY;DAMAGE
  output-channels: CHAT;FILE
blocked-commands: /example1, /example2, /example3
lang: lang_en
ban-module:
  enabled: true
enderchest-module:
  enabled: true
broadcast-module:
  enabled-servers: CURRENT
  enabled: true
timestamp-format: dd/MM/yyyy-HH:mm:ss
animation-packets: PacketPlayOutBlockBreakAnimation, PacketPlayOutBlockAction
auto-save: 3602
server-name: MC1
authentication:
  provider: noop
config-version: 6205
kick-module:
  enabled: true

[feature request] report investigation mode

one thing I currently do is limit the permissions of my staff until they are in staff mode, so they can't teleport, can't use core protect and can't access the inventoryRollback plugin until they activate staff mode.

There is a great opportunity to take this a step further by limiting staff permissions until they are "investigating" an open report. What this "investigation mode" would do is set permissions that would enable rollbacks, etc., but better yet save an audit log of the commands a staff member runs while working on a specific report. when they run any command or use staff chat while investigating a report, that command or chat and their XYZ coords in game will be logged alongside that report.

this would be a great way to prevent staff abuse.

Item pickug, Exp grab while vanish

Hello I have "item-pickup" to false but I can still pick up items, grab exp orbs and when I join I still have a join message (essentialsX hook) here is my config:

modes:
  default:
    block-manipulation: true
    inventory-interaction: true
    silent-chest-interaction: true
    item-drop: true
    item-pickup: false
    vanish-type: TOTAL
    invincible: true
    damage: false
    hunger-loss: false
    flight: true
    creative: false
    night-vision: false
    original-location: false
    enable-on-login: true
    disable-on-logout: false
    enable-commands: []
    disable-commands: []
    disable-on-world-change: false
    gui:
    - compass-module:1
    - random-teleport-module:2
    - vanish-module:3
    - gui-module:4
    - counter-module:5
    - freeze-module:6
    - cps-module:7
    - examine-module:8
    - follow-module:9
    - player-details-module:10

IPv6 IPs make Errors

[Craft Scheduler Thread - 280 - StaffPlus/WARN]: [StaffPlus] Plugin StaffPlus v1.17.8 generated an exception while executing task 723
net.shortninja.staffplus.core.common.exceptions.DatabaseException: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'ip' at row 1
at net.shortninja.staffplus.core.domain.player.ip.database.AbstractSqlPlayerIpRepository.save(AbstractSqlPlayerIpRepository.java:51) ~[?:?]
at net.shortninja.staffplus.core.domain.player.ip.PlayerIpService.savePlayerIp(PlayerIpService.java:30) ~[?:?]
at net.shortninja.staffplus.core.domain.player.ip.UpdateIpListener.lambda$updateIp$0(UpdateIpListener.java:25) ~[?:?]
at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:101) ~[patched_1.17.1.jar:git-Airplane-23]
at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[patched_1.17.1.jar:git-Airplane-23]
at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[patched_1.17.1.jar:git-Airplane-23]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[?:?]
at java.lang.Thread.run(Thread.java:831) [?:?]
Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'ip' at row 1
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) ~[patched_1.17.1.jar:git-Airplane-23]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) ~[patched_1.17.1.jar:git-Airplane-23]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092) ~[patched_1.17.1.jar:git-Airplane-23]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040) ~[patched_1.17.1.jar:git-Airplane-23]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347) ~[patched_1.17.1.jar:git-Airplane-23]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025) ~[patched_1.17.1.jar:git-Airplane-23]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[?:?]
at net.shortninja.staffplus.libs.com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[?:?]
at net.shortninja.staffplus.core.domain.player.ip.database.AbstractSqlPlayerIpRepository.save(AbstractSqlPlayerIpRepository.java:48) ~[?:?]
... 8 more

    I think the Plugin says that my IP is too long to save it in the mysql (mariadb) Database (IP: 2003:d3:2f08:ab01:6d72:***:853:587e)

sp_warnings.is_expired constraint violation

Not sure what causes this to appear, but every so often I get this warning in my console

WARN Plugin StaffPlus v1.16.49 generated an exception while executing task 13320 INFO java.lang.RuntimeException: org.sqlite.SQLiteException: [SQLITE_CONSTRAINT] Abort due to constraint violation (NOT NULL constraint failed: sp_warnings.is_expired)

Caused by: org.sqlite.SQLiteException: [SQLITE_CONSTRAINT] Abort due to constraint violation (NOT NULL constraint failed: sp_warnings.is_expired)

I changed it over to MySQL and I believe I have to restart the server for it to take affect, as the server is on a hosting website.
but currently, I do get that warning. I've been looking for the past hour trying to figure out what is causing it.
I understand it just a tiny bit, but not fully to where I could fix this on my own.

Chest inspector bug

Hello, I want to report a dupe glitch with chest.
I'm using the last release.

Steps:

  1. Put yourself in /staff mode and open a chest.
  2. Another user open the same chest and place items inside the chest.
  3. Close the chest.

Result: The item that was placed by the another user will disappear.

Staffchat discord sync repeating message after reload

After making a change on the config or templates of the Staff++ Discord Integration plugin, and doing /staffplusplusdiscord reload, and with the staffchat sync enabled, the messages coming from discord repeats the same number of times the plugin has been reloaded. However after a restart everything works fine.

  • Using Staff++ 1.18.7, Staff++ Discord Integration 1.16.61 and DiscordSRV 1.24.0

  • Message sent from the discord staffchat channel
    image

  • Messages received on minecraft after having executed /staffplusplusdiscord reload multiple times.
    image

How to use Multiline translations

@Lubinrns I created one for you.

Question: how to use Multiline translation values. \n does not work.

You can use the yaml Multiline string notation. Make sure to be on the latest version of staff++

Example:

key: |
   Multiple lines can be used here
   Just like this

personnel command

Why does Staff++ not show all staff members who have access to the staff mode when we do /personnel? We have helper, mod, admin, sradmin, owner as ranks for staff members. Helpers are getting trained to become mods. So they have very limited permissions.

Only admin, sradmin, and owner will come back as a result if I do /personnel. Attached you can see the modes.yml content.
modes.txt

Warm in chest, no severity

hello, I am currently setting up a server and I find your excellent plugin to facilitate my administrators.
I discovered a small lack, in the trunk the warning does not give severity, could you measure at least 1 point.
(sorry for my english, i use google translate)

version: 1.16.33
Capture d’écran 2020-11-14 192508

Could not pass event PlayerJoinEvent to StaffPlus v1.16.67

Hey, I have this problem so many times, someone help me.

[19:14:25] [Server thread/ERROR]: Could not pass event PlayerJoinEvent to StaffPlus v1.16.67 org.bukkit.event.EventException: null at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:319) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at net.minecraft.server.v1_16_R3.PlayerList.a(PlayerList.java:267) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at net.minecraft.server.v1_16_R3.LoginListener.c(LoginListener.java:173) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at net.minecraft.server.v1_16_R3.LoginListener.tick(LoginListener.java:71) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at net.minecraft.server.v1_16_R3.NetworkManager.a(NetworkManager.java:229) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at net.minecraft.server.v1_16_R3.ServerConnection.c(ServerConnection.java:143) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at net.minecraft.server.v1_16_R3.MinecraftServer.b(MinecraftServer.java:1246) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:394) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1127) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:966) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:273) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at java.lang.Thread.run(Thread.java:829) [?:?] Caused by: java.util.NoSuchElementException: packet_handler at io.netty.channel.DefaultChannelPipeline.getContextOrDie(DefaultChannelPipeline.java:1119) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at io.netty.channel.DefaultChannelPipeline.addBefore(DefaultChannelPipeline.java:260) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at io.netty.channel.DefaultChannelPipeline.addBefore(DefaultChannelPipeline.java:249) ~[server.jar:3055-Spigot-4225eac-6f55b5b] at com.comphenix.protocol.injector.netty.PipelineProxy.addBefore(PipelineProxy.java:61) ~[?:?] at com.comphenix.protocol.injector.netty.ChannelInjector$3$1.addBefore(ChannelInjector.java:314) ~[?:?] at net.shortninja.staffplus.server.compatibility.v1_1x.Protocol_v1_16_R3.inject(Protocol_v1_16_R3.java:148) ~[?:?] at net.shortninja.staffplus.core.domain.player.listeners.PlayerJoin.onJoin(PlayerJoin.java:60) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:315) ~[server.jar:3055-Spigot-4225eac-6f55b5b] ... 14 more

/examine Interaction bug

In player's inventory I can't move items in player's inventory, but I can grab items to my inventory then form my inventory I can put somewhere else in player's inventory.
2021-05-30_23-34-56

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.