BetterEnderChest
Secure and configurable Ender Chests! Disable the Ender Chest for certain players, while giving others more rows. Let your players protect their Ender Chest with Lockette and LWC, and let them share their chest. Give some players access to the /enderchest command to open their chest from anywhere. Give your mods the ability ot open anyone's Ender Chest. Ender Chests can be separated between world groups.
BetterEnderChest 2.2
Quote:Spigot 1.8
All updates for Spigot 1.8 won't be posted here, but on the Spigot forums instead: http://www.spigotmc.org/resources/betterenderchest.2073/
See you there!
This plugin makes Ender Chests secure and configurable. Disable the Ender Chest for certain players, while giving others more rows. Let your players protect their Ender Chest with Lockette and LWC, and let them share their chest to their friends in the same way they are already doing that with normal chests. Give some players access to the /enderchest
command to open their chest from anywhere. Give your mods the ability ot open anyone's Ender Chest. Ender Chests can be separated between world groups, so that the plugin is also usable on servers with separated inventories.
Some features required saving the Ender Chests in a separate file. The plugin automatically imports from vanilla, MultiInv, Multiverse-Inventories and WorldInventories, and there is a converter to convert back to vanilla.
Mojang.com UUID conversion
BetterEnderChest 2.2.* automatically converts names to UUIDs. To achieve this, BetterEnderChest uses evilmidget38's UUIDFetcher, which was modified a little bit. This requires access to https://api.mojang.com
. In BetterEnderChest 2.2.1, it is possible to continue using names instead of UUIDs, so that no access to mojang.com is needed. Set useUUIDs
to false
in the config.yml. However, you need to enable this option before any chests are converted, otherwise items will be lost.
For more information, see this wiki page.
whitespace hack
Features
Lockette and LWC integration
Uses Lockette signs or LWC protection so that you can allow other people/groups in your chest. When a chest is protected by you, and if someone else is allowed in your chest, he/she will see your items instead of his/her own items. This is completely optional. To enable this, simply add the Ender Chest to your LWC/Lockette custom block list. (See the installation instructions.)
whitespace hack
Public Ender Chest
Optional: unprotected (by Lockette and LWC) chests are public chests. If you don't add the Ender Chest to the custom block list of those plugins, or if you haven't installed them, there will be no way of making private chests.
whitespace hack
MySQL support
Running multiple servers in one network? BetterEnderChest supports MySQL as of version 2.1. If you use the same database and world group, chests will be shared. Flatfile is also supported, so don't worry if you don't have a database.
whitespace hack
Commands
Adds /enderchest
to open your Ender Chest from anywhere. Only for ops by default. It also adds a few useful administrative commands to open and manage the Ender Chest inventories. Commands work even when the owner of the inventory is offline.
whitespace hack
Chest customization
You can set the number of slots in the chest to make the Ender Chest not too overpowered. Players can have different chest sizes based on permissions. No client mods needed. You can also set the drops of the chest (nothing, itself, 8 obsidian, an Eye of Ender (with or without 8 obsidian), or with an Ender Pearl (with or without 8 obsidian) ).
whitespace hack
Multiworld support
Inventories can be separated between worlds, so that for example you creative worlds can have different Ender Chest inventories than your survival worlds, or your Nether world can have other Ender Chest inventories than the surface world. On installation, BetterEnderChest will automatically copy the group structure from your current inventory seperation plugin, if you have one. It is possible to setup another structure in BetterEnderChest than in the inventory seperation plugin. This can be used to create very interesting ways of transporting items between worlds and even servers.
whitespace hack
Default Ender Chest
You can have a default chest that all new players get when opening their Ender Chest for the first time. Edit it with /bec openinv --
defaultchest or a NBT editor. Changes will be applied after the next (auto)save. Each worldgroup has a different default chest.
whitespace hack
Save file format
The plugin has it's own saving/loading mechanics, either using NBT files or MySQL. This is necessary to make some of the features possible. The plugin automatically imports an Ender Chest when it is opened for the first time. The owner of the Ender Chest doesn't need to be online for this. The importer supports vanilla as well as some other plugins (MultiInv, Multiverse-Inventories and WorldInventories).
It doesn't save too often: every five minutes all changed chests are added to a save queue. You can set how fast chest in the save queue get saved.
whitespace hack
Installation and configuration
Just drop the plugin in the plugins folder. Most features will be disabled by default. Read the guide for starters here or read here about every configuration option.
whitespace hack
Permissions
You can view a complete list of the permissions here. The basic permissions are:
betterenderchest.user
- build, craft, open and destroy Ender Chest. Given to everyone by default.betterenderchest.command
- use all commands. Operators automatically get this permission.betterenderchest.command.openinv.self
- just the permission to open your own Ender Chest (or the public one, as defined in the config.yml) from anywhere using/enderchest
or/betterenderchest openinv
.betterenderchest.slots.upgrade1
- get the number of slots in the Ender Chest as defined in the config.yml.betterenderchest.slots.upgrade2
- get the number of slots in the Ender Chest as defined in the config.yml.
whitespace hack
Commands
<required argument> [optional argument]
- /betterenderchest deleteinv <player> - delete all items in someone's Ender Chest.
- /betterenderchest give <player> <item> [amount] [damage-value] - give an item to an Ender Chest inventory.
- /betterenderchest list - list all cached Ender Chest inventories. Useful for debugging.
- /betterenderchest openinv [player] - open an Ender Chest remotely.
- /betterenderchest viewinv <player> - view anyone's Ender Chest from anywhere. Editing is disabled.
- /betterenderchest reload - reload the configuration.
- /betterenderchest swapinv <player1> <player2> - swap two Ender Chests.
- /enderchest [player] - alias for /betterenderchest openinv [player]
Tips:
- Instead of typing /betterenderchest you could also type /bec.
- As seen in the permissions section above, it is possible to allow /enderchest but disallow /enderchest [player].
- /enderchest and /betterenderchest openinv (without the playername) normally open your own Ender Chest, but there is a setting in the config.yml to open the public Ender Chest instead.
- Use
--
publicchest as a player name to refer to the public Ender Chest, and use--
defaultchest for the default chest. - Use the syntax groupname/playername to open chests from another group. Example: /bec openinv cavegroup/Notch
whitespace hack
Translations
Not all messages can be translated yet, but the most common ones can. See here for more information, along with a premade Dutch translation file.
whitespace hack
@agent2594
Thanks, fixed. I'll wait until the shift-click bug is fixed instead of worked around until I do a new release.
I think I've found a bug (running BEC Beta 1.1.4 on CB 1.4.7-R0.1).
I've given myself the "betterenderchest.rows.upgrade2" permission, which is currently configured to provide 54 slots (6 rows). However, when I run "/bec openinv agent2594" I only see 27 slots (3 rows). This behavior persists until I actually craft an Ender Chest and use it, at which point I see 6 rows. I am using LWC 4.3.1, in case that matters.
@bartico6
I don't understand your question. If you want to separate the Ender Chests for every individual world, put each world in their own group in BetterEnderChest. If you want BetterEnderChest to use the same group layout as Multiverse-Inventories, just make sure that the BetterEnderChest groups match the Multiverse-Inventories groups. I won't add an option for automatic group synchronisation, as it's a lot of work for only a tiny benefit.
Possibility for integration with Multiverse-Inventories settings? Like reading the groups and doing some sharing between worlds, and basically separate Enderchest for every world?
Updated. Please be patient while the BukkitDev staff reviews the plugin.
The plugin won't work on Minecraft 1.4.7. I'll update the plugin tomorrow. For now, please be patient and keep your servers on Minecraft 1.4.6. :)
@beyonddead
Thanks. I have no idea what causes the first issue (never seen it by myself), but the second one should be fixed.
I'll add a debug mode to the plugin when I have time, so that we can figure out what is going on when the first error occurs.
Hi,
I've installed the plugin and configured it correctly. No issues with errors or anything, however players only get 1 slot no matter what group they're in.
Additionally, if they Shift-Click the chest or item, they can place in all 9 slots.
Thank you
@jasonrubik
That looks like an outdated WorldEdit version.
Also, this might help... since it involved an "AIR BLOCK"
This was the case before and after your v1.1.3 update.
With WorldEdit on a stone block...
2013-01-12 00:24:23 [INFO] jasonrubik issued server command: //set air
2013-01-12 00:24:23 [WARNING] WorldEdit: Failed to do NMS access for direct NBT data copy
java.lang.NoClassDefFoundError net/minecraft/server/NBTBase
at com.sk89q.worldedit.bukkit.BukkitWorld.getBlock(BukkitWorld.java:989)
at com.sk89q.worldedit.EditSession.rawGetBlock(EditSession.java:403)
at com.sk89q.worldedit.EditSession.getBlock(EditSession.java:357)
at com.sk89q.worldedit.EditSession.setBlock(EditSession.java:254)
at com.sk89q.worldedit.EditSession.setBlocks(EditSession.java:1121)
at com.sk89q.worldedit.commands.RegionCommands.set(RegionCommands.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sk89q.minecraft.util.commands.CommandsManager.invokeMethod(CommandsManager.java:522)
at com.sk89q.worldedit.WorldEdit$1.invokeMethod(WorldEdit.java:241)
at com.sk89q.worldedit.WorldEdit$1.invokeMethod(WorldEdit.java:172)
at com.sk89q.minecraft.util.commands.CommandsManager.executeMethod(CommandsManager.java:509)
at com.sk89q.minecraft.util.commands.CommandsManager.execute(CommandsManager.java:425)
at com.sk89q.worldedit.WorldEdit.handleCommand(WorldEdit.java:1339)
at com.sk89q.worldedit.bukkit.WorldEditPlugin.onCommand(WorldEditPlugin.java:197)
at com.sk89q.bukkit.util.DynamicPluginCommand.execute(DynamicPluginCommand.java:52)
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:186)
at org.bukkit.craftbukkit.v1_4_6.CraftServer.dispatchCommand(CraftServer.java:514)
at net.minecraft.server.v1_4_6.PlayerConnection.handleCommand(PlayerConnection.java:979)
at net.minecraft.server.v1_4_6.PlayerConnection.chat(PlayerConnection.java:897)
at net.minecraft.server.v1_4_6.PlayerConnection.a(PlayerConnection.java:852)
at net.minecraft.server.v1_4_6.Packet3Chat.handle(Packet3Chat.java:44)
at net.minecraft.server.v1_4_6.NetworkManager.b(NetworkManager.java:290)
at net.minecraft.server.v1_4_6.PlayerConnection.d(PlayerConnection.java:112)
at net.minecraft.server.v1_4_6.ServerConnection.b(SourceFile:39)
at net.minecraft.server.v1_4_6.DedicatedServerConnection.b(SourceFile:30)
at net.minecraft.server.v1_4_6.MinecraftServer.r(MinecraftServer.java:598)
at net.minecraft.server.v1_4_6.DedicatedServer.r(DedicatedServer.java:224)
at net.minecraft.server.v1_4_6.MinecraftServer.q(MinecraftServer.java:494)
at net.minecraft.server.v1_4_6.MinecraftServer.run(MinecraftServer.java:427)
at net.minecraft.server.v1_4_6.ThreadServerApplication.run(SourceFile:849)
Caused by: java.lang.ClassNotFoundException net.minecraft.server.NBTBase
at org.bukkit.plugin.java.PluginClassLoader.findClass0(PluginClassLoader.java:70)
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:53)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 33 more
Thanks, I will try the new version...
EDIT. It works ! THANKS SO MUCH !
If this helps, here is a list of my installed plugins. None of them have any non-default config entries related to EndeChests.
BattleKits ChatManager CommandBook LWC PermissionsEX / ModifyWorld Random Spawn WorldBorder WorldGuard WorldEdit
@jasonrubik
Edit: changed
block.getType()
toplugin.getChestMaterial()
and uploaded a new file. Now we have to wait until the BukkitDev staff approves it.That's... interesting. The error occured at this line:
event.getPlayer().getWorld().dropItemNaturally(block.getLocation(), new ItemStack(block.getType()));
This means that another plugin must have changed the event so that the type is now AIR, without cancelling the event, breaking my plugin. Grr. I'll change
block.getType()
toplugin.getChestMaterial()
which should work around the issue.The plugin was working fine with Bukkit 1.4.5, but now with 1.4.6 the Enderchest will not drop when broken with pickaxe.
Here is my config.yml
AutoSave:
autoSaveIntervalSeconds: 600
saveTickIntervalTicks: 10
chestsPerSaveTick: 3
showAutoSaveMessage: false
PrivateEnderChest:
defaultSlots: 18
slotsUpgrade1: 36
slotsUpgrade2: 54
BetterEnderChest:
saveFolderLocation: SERVER_ROOT
drop: ITSELF
dropSilkTouch: ITSELF
dropCreative: ITSELF
enderChestCompabilityMode: false
PublicEnderChest:
showOnOpeningUnprotectedChest: false
name: Public Chest
showOnUsingCommand: false
closeMessage: This was a public Ender Chest. Remember that your items aren't safe.
defaultSlots: 27
Imports:
default: vanilla
Groups:
default:
- world_nether
- world
- world_the_end
And here is my server log error:
*** **Caused by: java.lang.IllegalArgumentException Cannot drop AIR.** ***
2013-01-11 00:00:17 [SEVERE] Could not pass event BlockBreakEvent to BetterEnderChest v1.1.2
org.bukkit.event.EventException
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
at net.minecraft.server.v1_4_6.PlayerInteractManager.breakBlock(PlayerInteractManager.java:282)
at net.minecraft.server.v1_4_6.PlayerInteractManager.a(PlayerInteractManager.java:209)
at net.minecraft.server.v1_4_6.PlayerConnection.a(PlayerConnection.java:566)
at net.minecraft.server.v1_4_6.Packet14BlockDig.handle(SourceFile:46)
at net.minecraft.server.v1_4_6.NetworkManager.b(NetworkManager.java:290)
at net.minecraft.server.v1_4_6.PlayerConnection.d(PlayerConnection.java:112)
at net.minecraft.server.v1_4_6.ServerConnection.b(SourceFile:39)
at net.minecraft.server.v1_4_6.DedicatedServerConnection.b(SourceFile:30)
at net.minecraft.server.v1_4_6.MinecraftServer.r(MinecraftServer.java:598)
at net.minecraft.server.v1_4_6.DedicatedServer.r(DedicatedServer.java:224)
at net.minecraft.server.v1_4_6.MinecraftServer.q(MinecraftServer.java:494)
at net.minecraft.server.v1_4_6.MinecraftServer.run(MinecraftServer.java:427)
at net.minecraft.server.v1_4_6.ThreadServerApplication.run(SourceFile:849)
Caused by: java.lang.IllegalArgumentException Cannot drop AIR.
at org.apache.commons.lang.Validate.isTrue(Validate.java:157)
at org.bukkit.craftbukkit.v1_4_6.CraftWorld.dropItem(CraftWorld.java:293)
at org.bukkit.craftbukkit.v1_4_6.CraftWorld.dropItemNaturally(CraftWorld.java:310)
at nl.rutgerkok.BetterEnderChest.BetterEnderHandler.onBlockBreak(BetterEnderHandler.java:239)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
... 16 more
@thesuppup
The node is betterenderchest.user. :)
Prior to 1.0, it was betterenderchest.use. But because I changed the default value, the meaning (previously it was only opening the chest, now it also includes building/destroying/crafting) I renamed it.
Hi I was just wondering how I disable the enderchest completely with this plugin. I have tried removing the permission with -betterenderchest.use but nothing seems to work. I am using PEX for permissions.
@CipherMagi
Duping? That's a serious issue!
Never had this myself, and have restarted the server countless times while testing. What does exactly happen? Do you have a screenshot? Instructions to reproduce?
Great plugin! But items appear to be duping when server restarts? using BetterEnderChest Alpha v1.1.1 with CraftBukkit version git-Bukkit-1.4.5-R0.1 -2-g3c054f3-b2485jnks (MC: 1.4.5) (Implementing API version 1.4.5-R0.2-SNAPSHOT)
What am I doing wrong? :D
@aledrobt
Indeed, thanks to the ItemMeta changes. I have just uploaded a new file that works with Minecraft 1.4.6, and I won't downgrade to 1.4.5, sorry.
Doesn't work with the last recommended D:
@mystikite
Thank you. I'll look into it.
@rutgerkok
I've narrowed down the scenario. BEC works perfect.. right up until i do a /reload on the server. then it begins to behave badly, antosave warnings etc.