Limited Creative
Limited Creative
prevents any way of creative player to pass items to survival-mode, without need of a separate creative-world.
Overview
Scenario: You're starting your first survival server, just finished the spawn, the first players join and one asks: "hey sup, g1v3 me cr3at1v3. i made u teh imba *whatever*-building"
. Well, if you really decide to say okay to that, 5 minutes later, that players has stacks of diamondblocks, -armor and -tools in there bags. Next step? Reset your world and completely start over, which is never fun!
But Limited Creative is here to save you.
So how does Limited Creative prevents players from abusing creative-mode within your world:
- Switching back to survival? previous survival-inventory restored
- Trying to put items in a chest? denied
- Trying to drop something on the ground or hopper? denied
- Trying to put items into storage-carts or sell to villagers or similar? denied
- Using commands not intended for creative players? denied
- Using economy to sell for plugins? denied
- Wants to go anywhere in creative mode? denied
- Trying to place expensive blocks somewhere? allowed, for sure, that's what creative is for, but the block won't drop anything if destroyed in survival!
The restrictions aren't only for restricted players. I also like to have some of them as the owner. For example separated inventories: No need to rearrange your quick-bar after switching back to survival mode. No more bother because you thrown away a stack of grilled steaks for a single wool-block on switching back ;)
Or building a minecart track as op. While breaking blocks often carts, rails torches, redstone and much more fall to ground... no longer! LC prevents all that drops, or just removes them when you walk over.
Features
- Inventories-Module
- Display configured armor on creative players for visual distinction
- Remember creative inventory or not
- Separate adventure from survival or not
- Limit-Module
- prevent dropping of items in creative mode (even on death)
- prevent access to all types of chests in creative mode
- prevent usage of interactive signs (to stop economy in creative)
- prevent dealing or retrieving damage to/from other players (that means: no PvP between creative and survival player)
- blacklisting the use/create of items/blocks as well as breaking blocks
- blacklisting the interaction with selected entities
- optional prevent pick up of items in creative mode or remove items on pick up
- WorldGuard Region-Module
- that means: enable automatic creative-mode for selected players in regions you want
- blocks in creative regions never drop anything (independent who placed it or which game mode the destroyer is in)
- prevents pistons from getting blocks out of creative areas
- optional: let player switch game mode in creative-area (/lc creative/survival) without permission
- Command Blocker-Module
- While in creative mode, certain commands can blocked for users via configuration
- Either blocks simple strings or complex regular expressions
- Bypass certain parameter commands via permission
- GameMode-Permissions-Module
- Adds players to a configured permission-group as long as they are in creative
- This allows you to negate all permissions that creative players shouldn't use, like economic features
- Requires Vault and a Permission-Plugin supported by Vault
- BlockState-Module Disabled by default in config.yml
- Remembers if blocks are set by creative players
- Prevents the drop of blocks created by creative players, even if it is not in a region
- Works with pistons, tnt, item frames, falling sand/gravel and attached items like redstone/torches
- Supports MySQL and SQLite (definition form bukkit.yml)
- A tool (wood pickaxe by default; right-click) tells an op who created the block in which gamemode.
- A command (/lc bs) to modify the saved state in the database, via WorldEdit-Selections
All features are optional and can be independent disabled in config.
Utilizing the only for LC developed library plib, LC provides easy usability for admins:
- Self explaining config.yml, with every setting documented
- Full configurable from commandline/ingame commands
- Detailed command explanation for every (sub-)command (
/lc help
) - On the fly module enable- and disabling via configuration-commands
Documentation
While most of the plugin (config and commands) are self explaining, you can click on the features above for further description (incomplete). Also following some more references:
Commands
Configuration
Permissions
FAQ (Frequently Asked Questions)
Miscellaneous
Translation / Supporting the Plugin
Please help translating the plugin, by clicking on your Language at the Translation-Page. You can then enter the localized strings for you language. It should be easy to you to add some strings of your mother language. Improvements to English language is also welcome.
Also I would like to add some new Screenshots, maybe a Video. So feel free to send me what you imagine represents this Plugin.
Collecting Statistics
This plugin collects some basic statistics about the amount of servers using this plugin, as well as MCStats.
What is send: Server-Name, -Address and -Version, List of installed Plugins, LimitedCreative-Version, Count of players online. These Information aren't published and can only be seen by me, the Author (Possible).
The MCStats are complete anonymous and can be seen by everyone here.
You can disable all collection with /lc config metrics false
and /lc config save
Before doing that I please you to read further about the Metrics.
Known Problems/Bypasses/Incompatibilities
Attention: WorldGuard has its own "game-mode" flag. That flag doesn't relate to LC in any way! Be sure to use "//
region flag <id> gamemode creative
" instead of /region ...; Otherwise the LC restrictions won't affect that region.
Currently no ways to bypass restrictions as a creative player are known
as of Nov 2, 2013 (some reports are currently under evaluation)
Links/Contact/Donation
- PayPal-Donation
- Free-of-cost-Donation: Register on Dropbox and unlock me additional storage
- IRC-Chat: #[email protected]
- E-Mail / Jabber: [email protected]
- Skype: [email protected] / jascha.starke
- Suggestions/Bugs - How to Use debug for additional information
- Source on GitHub
- Development builds of this project can be acquired at the provided continuous integration server.
These builds have not been approved by the BukkitDev staff. Use them at your own risk.
http://ci.ja-s.de:8080/
Special thanks to all Donators:
90$ zeshan321
50$ http://www.cosmicmc.com/ (MinecraftAllen)
25$ Suzy
5$ Punkred
<sub>Timerange: Jan. 2012 till Dec. 2013</sub>
How to handle errors/problems
I will no longer bearing huge error msgs in the comments. Make a ticket for that if you want me to react on that. If there is an error message in the comments i may delete the comment without annotation.
Running on Cb #1797
Illegal enchanted items now restored back correctly. Thank you.
Also the author of ChestBank fixed isCancelled , so everything is all fine :)
Thank you for filing the ticket
@Mako_Shark Please file a ticket, with detailed error messages, plugin/bukkit versions etc. But i'm sure you misread the error message. The config file should auto generate on first load. But therefor, the bukkit-server needs permissions to create/write the directory "plugins/LimitedCreative". So the error message may be s.t. like "failed to write to config.yml". Please be sure, the bukkit-server has write permissions to change/create "plugins/LimitedCreative". (as other plugins act similar, bukkit should have full write access to whole plugins-directory)
@predawnia I have filed tickets for ChestBank & ChestShop (on there projects). There is nothing more i can do. You may also file tickets for other plugins which doesn't check for isCancelled. It isn't more than:
but seems, not every plugin checks that, like e.g. Essentials does it.
@Possible
ChestBank can be accessed by Limited Creative as well. http://dev.bukkit.org/server-mods/chestbank/
Not sure if I'm just being stupid, but when I install and run this, it just gives me an error because there is no config file. I tried manually creating one to see if it would autofill it with the options but this didn't work.
Is there somewhere that I should download the config from or should the plugin generate it and it isn't for some reason?
Edit: Found it on the GitHub. Would it not be possible to make the plugin auto-generate it to make installing it easier?
@McGarnicle
Ill second that :)
As soon as the block blacklist goes in I'll be happy to help with testing. It's the main thing I need.
I'll looking into your nots:
ev3rmor3 could you please give me some more details on the block-placing problem? which version of the plugin have you used? which bukkit release? which config option? other plugins installed? any errors in console? where you in creative or survival mode?
@ev3rm0r3
I also cannot place any blocks, upon placing them they vanish. Only what I had on me before using a creative block is place-able.
2012-01-20 15:58:47 [SEVERE] Could not pass event PLAYER_GAME_MODE_CHANGE to Lim itedCreative could not determine a constructor for the tag tag:yaml.org,2002:org.bukkit.Mater ial in "<string>", line 5, column 11: type: !!org.bukkit.Material 'FIRE' ^
I get this on a lot of items that aren't just your standard blocks. Did you add tracking for all items including off the shelf spawned items?
Yay! I don't know if this plug-in is in response to my request for this type of plug-in on the requests page, but either way, awesome! I have a problem on my server with a guy in creative mode handing out diamond blocks and tools and various other materials to every joe that joins the server. Needless to say its trashing the experience for them and ruining my vision of my server. I don't want to deny him creative mode, I just want to inhibit his philanthropy.
If you could include block blacklists this would be perfect for me!
@Possible
There are many plugins that allows you to enchant your items to many levels.
You can enchant items using "Tim The Enchanter"
http://dev.bukkit.org/server-mods/enchanter/
Also, I noticed that, the "do not interact with signs"-limitation doesn't quite work with ChestShop or VirtualChest signs as well. It shows the message, but still allows you to use the signs. :P
@predawnia
Well, please tell me, how you got the illegal enchantment level 4 of fire aspect on your iron chest plate. Minecraft limits its level to 2 on swords. I mean: what plugin allows you that to do?
Hmm.. does this work with Bukkit 1718? :)
I got this error... of which all my enchanted gear disappear upon switching to creative, when switched back to survival.. enchanted equipment gone :(
13:24:05 [SEVERE] Could not pass event PLAYER_GAME_MODE_CHANGE to LimitedCreative
java.lang.IllegalArgumentException Enchantment level is either too low or too high (given 4, bounds
are 1 to 2
at org.bukkit.inventory.ItemStack.addEnchantment(ItemStack.java:276)
at org.bukkit.inventory.ItemStack.deserialize(ItemStack.java:378)
at de.jaschastarke.minecraft.limitedcreative.serialize.Items.sectionGetItem(Items.java:73)
at de.jaschastarke.minecraft.limitedcreative.serialize.Armor.restore(Armor.java:49)
at de.jaschastarke.minecraft.limitedcreative.Inventory.restoreInventory(Inventory.java:87)
at de.jaschastarke.minecraft.limitedcreative.Inventory.load(Inventory.java:48)
at de.jaschastarke.minecraft.limitedcreative.LCPlayer.onSetCreative(LCPlayer.java:106)
at de.jaschastarke.minecraft.limitedcreative.Listener$PlayerListen.onPlayerGameModeChange(Li
stener.java:51
Here's my user_CREATIVE.yml file:
armor:
helmet:
type: IRON_HELMET
enchantments:
PROTECTION_EXPLOSIONS: 4
chestplate:
type: DIAMOND_CHESTPLATE
leggins:
type: DIAMOND_LEGGINGS
boots:
type: DIAMOND_BOOTS
inv:
'0':
type: DIAMOND_SWORD
'1':
type: DIAMOND_AXE
'2':
type: DIAMOND_PICKAXE
'3':
type: GLOWSTONE
'4':
type: SOUL_SAND
'5':
type: DIAMOND_SPADE
'6':
type: BOW
'7':
type: IRON_LEGGINGS
enchantments:
PROTECTION_PROJECTILE: 4
'8':
type: BREAD
amount: 64
'9':
type: IRON_BOOTS
enchantments:
PROTECTION_FALL: 4
'10':
type: IRON_HELMET
enchantments:
PROTECTION_EXPLOSIONS: 4
'11':
type: IRON_CHESTPLATE
enchantments:
FIRE_ASPECT: 4
'33':
type: ARROW
amount: 64
@CoolOppo
Yeah, that would be nice. But at the moment, it isn't realistic.
It would be really awesome to make it implement a way to still drop (survival mode placed) blocks when you break them in creative, and to have them not drop blocks no matter what if they were placed in creative.
@predawnia
Thanks for trying the alpha version. The Problem should be fixed, with v0.2-beta. If not, please file a ticket (http://dev.bukkit.org/server-mods/limited-creative/tickets/) with additional information:
I found this error message....
18.01 16:51:04 [Server] INFO at net.minecraft.server.ThreadServerApplication.run(SourceFile:465)
18.01 16:51:04 [Server] INFO at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:432)
18.01 16:51:04 [Server] INFO at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:534)
18.01 16:51:04 [Server] INFO at net.minecraft.server.NetworkListenThread.a(SourceFile:108)
18.01 16:51:04 [Server] INFO at lishid.orebfuscator.utils.NetServerHandlerProxy.a(NetServerHandlerProxy.java:44)
18.01 16:51:04 [Server] INFO at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:96)
18.01 16:51:04 [Server] INFO at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
18.01 16:51:04 [Server] INFO at net.minecraft.server.Packet3Chat.a(Packet3Chat.java:33)
18.01 16:51:04 [Server] INFO at lishid.orebfuscator.utils.NetServerHandlerProxy.a(NetServerHandlerProxy.java:101)
18.01 16:51:04 [Server] INFO at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:721)
18.01 16:51:04 [Server] INFO at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:728)
18.01 16:51:04 [Server] INFO at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:768)
18.01 16:51:04 [Server] INFO at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:382)
18.01 16:51:04 [Server] INFO at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:168)
18.01 16:51:04 [Server] INFO at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
18.01 16:51:04 [Server] INFO at net.pwncraft.kaikz.instamode.InstaMode.onCommand(InstaMode.java:75)
18.01 16:51:04 [Server] INFO at org.bukkit.craftbukkit.entity.CraftPlayer.setGameMode(CraftPlayer.java:462)
18.01 16:51:04 [Server] INFO at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:340)
18.01 16:51:04 [Server] INFO at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
18.01 16:51:04 [Server] INFO at org.bukkit.plugin.java.JavaPluginLoader$28.execute(JavaPluginLoader.java:457)
18.01 16:51:04 [Server] INFO at de.jaschastarke.minecraft.limitedcreative.Listener$PlayerListen.onPlayerGameModeChange(Listener.java:19)
18.01 16:51:04 [Server] INFO at de.jaschastarke.minecraft.limitedcreative.PlayerCore.onSetCreative(PlayerCore.java:19)
18.01 16:51:04 [Server] INFO at de.jaschastarke.minecraft.limitedcreative.Inventory.load(Inventory.java:31)
18.01 16:51:04 [Server] INFO at de.jaschastarke.minecraft.limitedcreative.Inventory.restoreInventory(Inventory.java:68)
18.01 16:51:04 [Server] INFO at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:241)
18.01 16:51:04 [Server] INFO at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:109)
18.01 16:51:04 [Server] INFO at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:143)
18.01 16:51:04 [Server] INFO at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:60)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.Yaml.load(Yaml.java:399)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:480)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:128)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:142)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:459)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:307)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:143)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:326)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:459)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:307)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:143)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:326)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:459)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:307)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:143)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:326)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)
18.01 16:51:04 [Server] INFO at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructUndefined.construct(SafeConstructor.java:475)
18.01 16:51:04 [Server] INFO ^
18.01 16:51:04 [Server] INFO type: !!org.bukkit.Material 'IRON_BLOCK'
18.01 16:51:04 [Server] INFO in "<string>", line 5, column 11:
18.01 16:51:04 [Server] INFO could not determine a constructor for the tag tag:yaml.org,2002:org.bukkit.Material
18.01 16:51:04 [Server] SEVERE Could not pass event PLAYER_GAME_MODE_CHANGE to LimitedCreative
Just waiting for permissions
@shinji257 All enchantments and additional attributes should be considered. The Plugin uses the serialization given by the CraftBukkit-API. Only caveat: Because i want to rely on the "good" serialization implemented in the latest dev-builds, which doesn't exists in 1.0.1, i had to use a "not so reliable" serialization for backward-compatibility with 1.0.1. The migration from 1.0.1 to 1.1 may break, depending on the enchantments. But the positive thing is: When we all are on an Recommended Build 1.1-R1 in the future, the serialization is as perfect as craftbukkit is (so i can blame them if it doesn't work :D)
Cool. I'm going to keep my eye on this one. Please make sure you take into consideration of enchanted weapons/armor including those that have illegal enchantments if possible. Thanks.