InvSee++ 0.10.3

View and edit inventories of your players! Works for offline players too!

  1. Jannyboy11
    Native Minecraft Version:
    1.15
    Tested Minecraft Versions:
    • 1.12
    • 1.15
    • 1.16
    • 1.17
    Source Code:
    https://github.com/Jannyboy11/InvSee-plus-plus
    Contributors:
    https://github.com/Jannyboy11/InvSee-plus-plus/graphs/contributors
    InvSee++ Inventory manipulation done right!

    [​IMG]


    !! This plugin requires Java 11 or newer !!

    Features:
    • View and edit other players' inventories and enderchests
    • Includes player's armour contents and off-hand items.
    • Includes player's crafting/workbench/anvil/smithing table/stonecutter/grindstone/loom/enchanting table/merchant items and the item held in the player's cursor.
    • Support for offline players, even for players who have never logged into the server yet.
    • Auto-reloading of spectator inventories when players relog.
    • Simple yet extensive application programming interface.
    • Optional integration with PerWorldInventory. This requires load-data-on-join: true in its config.

    Showcase video:



    Commands:
    • /invsee <userName>|<uniqueId>
    • /endersee <userName>|<uniqueId>
    If PerWorldInventory is installed then both commands can take an optional extra argument:
    • /invsee <userName>|<uniqueId> PWI{<property>=<value>,...}
    • /endersee <userName>|<uniqueId> PWI{<property>=<value>,...}
    ...where <property> can be one of [group, world, gamemode].

    Because PerWorldInventory shares inventories based on groups you can specify the group directly as a property, or you can have InvSee++ resolve it for you by just specifying the world. If a gamemode is unspecified then InvSee++ will default to gamemode survival.

    Permissions:

    Permissions are split up into 4 base permissions:
    • invseeplusplus.invsee.view
    • invseeplusplus.invsee.edit
    • invseeplusplus.endersee.view
    • invseeplusplus.endersee.edit
    To simplify your life you can use these built-in parent permissions:
    • invseeplusplus.invsee provides:
      • invseeplusplus.invsee.view
      • invseeplusplus.invsee.edit
    • invseeplusplus.endersee provides:
      • invseeplusplus.endersee.view
      • invseeplusplus.endersee.edit
    • invseeplusplus.view provides:
      • invseeplusplus.invsee.view
      • invseeplusplus.endersee.view
    • invseeplusplus.edit provides:
      • invseeplusplus.invsee.edit
      • invseeplusplus.endersee.edit
    • invseeplusplus.* provides all 4 of the base permissions.

    Metrics:

    This plugin collects anonymous metrics which are submitted to bStats.org. They help me to see how the plugin is used and thus with future development. This feature can be disabled in the /plugins/bstats/config.yml file.

    Credits:
    Special thanks to Icodak for creating the logo! Discord profile: Icodak#5793


    Scope of the project
    I currently don't have many new features in mind, but if you need some functionality, feel free to ask it on the discussion thread! (Java 8 support is a no-no!)
    Currently planned: cross-server invsee, multiverse-inventories and separe-world-items integration.

    Do you like this plugin?

    Don't forget the leave a review! :)
    MishaNeYT likes this.

Recent Reviews

  1. laspi94
    laspi94
    5/5,
    Version: 0.10.2
    Excelent plugin simple and funcionality, Can you add a database to be able to manipulate the inventory of offline users?
    1. Jannyboy11
      Author's Response
      No, this plugin interacts with the players' save files directly.
  2. sebastien
    sebastien
    3/5,
    Version: 0.10.2
    Cannot give items to offline players.....................................................
    1. Jannyboy11
      Author's Response
      Interesting. That used to work. Do you use a server implementation that's using a different player saving/loading scheme then CraftBukkit?
      Thanks for the 3 stars anyway.
  3. reletivminecraft
    reletivminecraft
    4/5,
    Version: 0.10.2
    Excellent plugin! Lightweight and easy to use.
    Working perfect on paper 1.17.1. Its worth 5 stars if an exempt perm is added imo.
    1. Jannyboy11
      Author's Response
      Thank you! I'll see when I can do this.
  4. The.Phoenix
    The.Phoenix
    5/5,
    Version: 0.10.1
    working perfect. .
    1. Jannyboy11
      Author's Response
      Thank you for the 5-star rating!
  5. iron.app
    iron.app
    5/5,
    Version: 0.10.1
    Finally a proper INVSEE plugin, it's awesome and I will 100% recommend to my friends!
    1. Jannyboy11
      Author's Response
      Thank you!
  6. Zakallenko
    Zakallenko
    5/5,
    Version: 0.10
    Nice plugin! But it doesn't work on 1.17.1, I get an "Internal error" when I try to execute the command. I'm using the latest version (0.10) on the Airplane core (Spigot fork). Also when trying to execute / invsee (even if it works, like in 1.16.5) it spamming in the console something like this:
    [20:40:46] [Netty Epoll Server IO #1/WARN]: [InvSee++] Error reading player's save file /root/server/./world/playerdata/619ffb53-43ba-3bde-b411-fb136d872951-8370536774203240620.dat
    java.io.EOFException: null
    at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:268) ~[?:?]
    at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:258) ~[?:?]
    at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:164) ~[?:?]
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:79) ~[?:?]
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:91) ~[?:?]
    at net.minecraft.nbt.NbtIo.readCompressed(NbtIo.java:50) ~[?:?]
    at net.minecraft.nbt.NbtIo.readCompressed(NbtIo.java:34) ~[?:?]
    at com.janboerman.invsee.spigot.impl_1_17_R1.KnownPlayersProvider.getAll(KnownPlayersProvider.java:57) ~[?:?]
    at com.janboerman.invsee.paper.AsyncTabCompleter.onTabComplete(AsyncTabCompleter.java:59) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor82.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-44]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-44]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-44]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-44]
    at org.bukkit.event.Event.callEvent(Event.java:45) ~[patched_1.17.1.jar:git-Airplane-44]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleCustomCommandSuggestions(ServerGamePacketListenerImpl.java:810) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundCommandSuggestionPacket.handle(ServerboundCommandSuggestionPacket.java:28) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundCommandSuggestionPacket.handle(ServerboundCommandSuggestionPacket.java:6) ~[?:?]
    at net.minecraft.network.Connection.genericsFtw(Connection.java:303) ~[?:?]
    at net.minecraft.network.Connection.channelRead0(Connection.java:289) ~[?:?]
    at net.minecraft.network.Connection.channelRead0(Connection.java:54) ~[?:?]
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93) ~[patched_1.17.1.jar:git-Airplane-44]
    at me.neznamy.tab.platforms.bukkit.BukkitPipelineInjector$BukkitChannelDuplexHandler.channelRead(BukkitPipelineInjector.java:109) ~[?:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:302) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[patched_1.17.1.jar:git-Airplane-44]
    at com.comphenix.protocol.injector.netty.ChannelInjector$2.channelRead(ChannelInjector.java:289) ~[?:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.handler.flush.FlushConsolidationHandler.channelRead(FlushConsolidationHandler.java:152) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:795) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:480) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[patched_1.17.1.jar:git-Airplane-44]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[patched_1.17.1.jar:git-Airplane-44]
    at java.lang.Thread.run(Thread.java:831) [?:?]
    1. Jannyboy11
      Author's Response
      Thanks for reporting (although this is not the proper place for that). Technically this error does not occur when executing the command, but it happens when a player name is tabcompleted. One of your player save files seems to be corrupt and therefore can't be read by the plugin. I'll submit a new build that makes the error a lot less spammy.
  7. Prodiguy
    Prodiguy
    5/5,
    Version: 0.9
    I keep getting "An internal error occurred while attempting to perform this command" why I try to use invsee, see works fine...
    1. Jannyboy11
      Author's Response
      I'm working on an update for 1.17.1, that should solve it. A little more patience pl0x! <3
  8. V-SPAN
    V-SPAN
    5/5,
    Version: 0.9
    [08:19:09] [Server thread/ERROR] [Minecraft]: Could not load 'plugins/InvSee++.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: Cannot find main class `com.janboerman.invsee.spigot.InvseePlusPlus'
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:80) ~[PluginClassLoader.class:a2b8e25-STABLE]
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[JavaPluginLoader.class:a2b8e25-STABLE]
    at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:330) ~[SimplePluginManager.class:a2b8e25-STABLE]
    at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:252) [SimplePluginManager.class:a2b8e25-STABLE]
    at org.bukkit.craftbukkit.v1_12_R1.CraftServer.loadPlugins(CraftServer.java:322) [CraftServer.class:a2b8e25-STABLE]
    at net.minecraft.server.MinecraftServer.func_71247_a(MinecraftServer.java:416) [MinecraftServer.class:?]
    at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:321) [nz.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:688) [MinecraftServer.class:?]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_292]
    Caused by: java.lang.ClassNotFoundException: Failed to remap class com.janboerman.invsee.spigot.InvseePlusPlus
    at org.bukkit.plugin.java.PluginClassLoader.remappedFindClass(PluginClassLoader.java:208) ~[PluginClassLoader.class:a2b8e25-STABLE]
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:135) ~[PluginClassLoader.class:a2b8e25-STABLE]
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:109) ~[PluginClassLoader.class:a2b8e25-STABLE]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_292]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_292]
    at java.lang.Class.forName0(Native Method) ~[?:1.8.0_292]
    at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_292]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:78) ~[PluginClassLoader.class:a2b8e25-STABLE]
    ... 8 more
    Caused by: java.lang.IllegalArgumentException
    at org.objectweb.asm.ClassReader.<init>(Unknown Source) ~[asm-all-5.2.jar:5.2]
    at org.objectweb.asm.ClassReader.<init>(Unknown Source) ~[asm-all-5.2.jar:5.2]
    at org.magmafoundation.magma.remapper.utils.RemappingUtils.remapFindClass(RemappingUtils.java:99) ~[RemappingUtils.class:a2b8e25-STABLE]
    at org.bukkit.plugin.java.PluginClassLoader.remappedFindClass(PluginClassLoader.java:196) ~[PluginClassLoader.class:a2b8e25-STABLE]
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:135) ~[PluginClassLoader.class:a2b8e25-STABLE]
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:109) ~[PluginClassLoader.class:a2b8e25-STABLE]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_292]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_292]
    at java.lang.Class.forName0(Native Method) ~[?:1.8.0_292]
    at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_292]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:78) ~[PluginClassLoader.class:a2b8e25-STABLE]
    ... 8 more
    1. Jannyboy11
      Author's Response
      Looks like Magma 1.12.2 does not support plugins compiled for Java 11 because of the old version of ASM that they're using. You need to either upgrade Magma to a version that does support Java 11 plugins (requires at least ASM version 7 iirc), or move over to CraftBukkit/Spigot/Paper.
  9. Nqud
    Nqud
    5/5,
    Version: 0.9
    Nou voor de nederlandse mensen, dit is echt top voor je Minetopia en natuurlijk ook andere dingen. IK had hem een berichtje gestuurd op discord en hij zei: "Ik ga er direct aanbeginnen" 1 dag later en het was klaar top kwailiteit! Top support, beter dan OPENINV hem zelf. Ik raad je deze plugin echt aan, top gedaan!
    1. Jannyboy11
      Author's Response
      Dankjewel voor de review en de 5 sterren!
  10. NotSteve
    NotSteve
    5/5,
    Version: 0.8
    I had to come back to write another review 7 months later because this plugin truly is a life saver! The plugin does what it advertises, and the developer is super friendly. Now that 1.17 requires Java 16, there's no excuse for server hosts to be running outdated versions of Java, so give this plugin a try!
    1. Jannyboy11
      Author's Response
      I wouldn't say I've been very friendly to everyone as I have been quite blunt in the past, but thank you for the kind review and the 5 stars!