Physical Backpacks
Backpacks
Description
Backpacks can be acquired with /backpack give. This will put an empty backpack (chest) in your inventory.
Backpacks are accessed by holding them in your hand & right clicking.
Since backpacks are physical items, you can store items in one, then throw it to another player.
Warning: Backpacks should not be renamed with an anvil (this will delete the backpack). Instead, use /backpack name
Commands
/backpack: Base backpack command, shows help dialogue
/backpack give [name]: Gives the player a backpack (if no name is specified, the name will just be "Backpack")
/backpack name <name>: Name the backpack in your hand
Permissions
backpack.use: Gives access to /backpack (and all sub commands)
No permission is required to open a backpack.
Config
http://dev.bukkit.org/bukkit-plugins/physical-backpacks/pages/config-yml/
Updater
This plugin checks for updates on startup. You can disable update checking by setting checkupdate: false in the plugin's config file.
Metrics
This plugin utilises Hidendra's plugin metrics system, which means that the following information is collected and sent to mcstats.org:
- A unique identifier
- The server's version of Java
- Whether the server is in offline or online mode
- The plugin's version
- The server's version
- The OS version/name and architecture
- The core count for the CPU
- The number of players online
- The Metrics version
Opting out of this service can be done by editing plugins/Plugin Metrics/config.yml and changing opt-out to true.
Videos
http://dev.bukkit.org/bukkit-plugins/physical-backpacks/pages/videos
at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:631) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:633) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:628) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:630) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:631) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:633) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:628) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:630) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:631) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:633) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:628) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:630) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:631) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:633) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:628) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:630) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.e(BlockRedstoneWire.java:49) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockRedstoneWire.doPhysics(BlockRedstoneWire.java:237) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.e(World.java:680) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.World.applyPhysics(World.java:628) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.BlockLever.interact(BlockLever.java:215) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb] at net.minecraft.server.v1_7_R4.PlayerInteractManager.interact(PlayerInteractManager.java:391) [mc.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
It's a nice alternative to the ChestBank plugin we've been using for years.
Just one thing - please add a method to recover lost / misplaced backpacks.
You've already added the prevention of putting a backpack into itself, and I suppose it might be too difficult to check for much more than that - but I can still put a backpack into another backpack that's inside it (backpack1 -> backpack2 -> backpack1) which makes it inaccessible after closing the inventory, though its data file is obviously still there.
So, please add a method to either access or recreate backpacks by their ID string.
Not everyone should be allowed to just do that, so this should require a permission node.
On a side note, this might also have the potential for admins / gamemasters to list and control other users' backpacks. Though I'm not sure if it's possible to reliably check who actually owns/carries a specific backpack - maybe by logging every access, so whenever any user accesses a backpack, there would be a list of all previous accesses displayed next to it. Or something like that. (Wouldn't that even make shared backpacks possible?)
Edit: Maybe you could add a "nestable" tag (and an according command) that would indicate whether a backpack can be put into another backpack - then that tag would have to be removed/reset first to make the backpack nestable again. Maybe the tag could be reset when the backpack is dropped.
Edit 2: While you're at it, maybe you could add a "locked" tag (and a corresponding "owner" tag), so that dropped backpacks would only be accessible by that user.
(Could that even prevent the backpack from being picked up?)
Edit 3: The plugin's periodic saving alone doesn't suffice. There should be a way to forcibly save all backpack data to disk, or maybe just do that every time a backpack is closed (and if or when it has been modified in any way - which includes its creation). Also, when the server shuts down (or restarts) or someone issues the /reload command, all backpack data should be saved - elsewise sometimes data is lost !
@0ct0ber
I guess you could also fill backpacks with more backpacks, so the total slot number is unlimited. Lol
Warning! This plugin contains bugs:
- Items can be duplicated: 1.) use an enderchest 2.) put the backpack containing items you want to duplicate into the enderchest 3.) open the backpack in the enderchest, take out the items 4.) wait some time (maybe 1 hour or more) and open the backpack ... it will now contain duplicated items!
- Items in backpacks sometimes getting lost, disappearing (can not reproduce, yet)
Can you fix these bugs?
Really like the plugin!
just an idea but what if your inventory is full couldnt you make it so the items get added to your backpack
@michaelkrauty could you make it so if your mining the block goes into the backpack and then when you sell it takes it out
@benlewisc
Thank you very much! Check the videos page :)
Hey Cool plugin! It was so cool that I made a video/tutorial on it. https://www.youtube.com/watch?v=eyJGbsgV3aw&list=UUXx9S2b8suZKQqnIwzLXEdg&index=1
Feel free to put it on your page or wherever. :) Thanks for making such an awesome and useful plugin!
Sweet, I will PM You the link to it later? :)
@ShadowWolf1995
sure, it wouldn't hurt :P
Would you like a review video making for this?
@DaDomoDude
cooldowns added in v2.5.8
@michaelkrauty
that would be awesome :D
@DaDomoDude
I could add a cooldown for spawning backpacks, but I'm not sure I could add a limit
Of course the cooldown could be changed/disabled in the config
Do you think in one of your next updates you can make it so you can put a limit on the backpacks? So like if i have a member and a donor and i want my member to have one backpack and i want my donor to have two. is there some way you can make this happen? like for the permission have it backpack.limit.* for as many as you want and backpack.limit.<number of backpacks>
as i said would be very helpful to have if this is even possbile
@Formula350
in v2.4+, you can right click the backpack in the inventory screen to open it
as for preventing other players from opening a backpack, I could add a password or some sort of locking feature
@michaelkrauty
Nono, I totally understood that from the start lol That's what RealisticBackpacks is, too. You have a chest, and right-click while holding it to open it. It's just that the command I mentioned, is for Admins to view another user's backpack remotely. The main difference between these two plugins though, is that Realistic's backpacks aren't able to be viewed by others if you pickup the backpack, so that command is kind of necessary. Nevertheless, if you're trying to inconspicuously view a player's backpack, no real way w/o a command to do that. Only way I can think of accomplishing it would be by removing the backpack through Invsee, but then they'll know you're doing that lol
Only reason I ask for that ability is because some players like to hide items they shouldn't have (class based weapons, by stealing them from other players), and so this would just be a less intrusive way to inspect backpacks to make sure anyone we suspect of having some, don't in fact.
@XueNi
Are there any errors logged on startup? I need more info than that :P
@Formula350
I think you misunderstand what this plugin is..
Backpacks can't be accessed with a command, a player actually has to have the backpack in their inventory to open it. If the player drops the backpack on death, then anyone can pick it up and open it.
basically in order for anyone, even an admin, to view the contents a backpack, they have to physically have the backpack in their inventory
@michaelkrauty
The RealisticBackpacks has a command, /rb view <playername> <backpackname in config>. So for us, we have it set for the default backpack name, of just "backpack", meaning I would type in to view your backpack's contents (in a similar window as /invsee): /rb view michaelkrauty backpack
As for the "death" option, here's what Realistic's config options are (fairly self explanatory): onDeath: dropContents: false destroyContents: false dropBackpack: false keepBackpack: false
As for the Speed/Hunger request, only reason is if a person were to add in a 54slot backpack, having it burden the player (at the very least, reducing speed) would add to the immersion (I use the term lightly, since it IS Minecraft lol).