localization base implementation
commands: - switch gamemode - change options permissions: - for commands - bypass limits
This commit is contained in:
parent
b7b247f92e
commit
a660fab73a
15 changed files with 639 additions and 55 deletions
48
LimitedCreative/config.yml
Normal file
48
LimitedCreative/config.yml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# --------------------------------
|
||||||
|
# Limited Creative - Configuration
|
||||||
|
# Full Default Configuration at:
|
||||||
|
#
|
||||||
|
# --------------------------------
|
||||||
|
|
||||||
|
store:
|
||||||
|
# StoreCreative
|
||||||
|
# Should the creative-inventory also be stored on disk, when switching to survival?
|
||||||
|
# If disabled, the inventory gets cleared every time on switching to creative.
|
||||||
|
# default: true
|
||||||
|
creative: true
|
||||||
|
|
||||||
|
# InventoryFolder
|
||||||
|
# The folder inside the datadir-folder (plugin/LimitedCreative) where the inventories are saved to.
|
||||||
|
# By default the inventories are saved to plugin/LimitedCreative/inventories.
|
||||||
|
# default: "inventories"
|
||||||
|
folder: "inventories"
|
||||||
|
|
||||||
|
limit:
|
||||||
|
# BlockPickup
|
||||||
|
# Prevents the pickup of items while in creative mode
|
||||||
|
# default: true
|
||||||
|
pickup: true
|
||||||
|
|
||||||
|
# BlockSign
|
||||||
|
# Prevents interacting with signs (right-click), while in creative mode, so trading becomes more difficult.
|
||||||
|
# Attention: this will also block useful signs, like Lifts.
|
||||||
|
# default: true
|
||||||
|
sign: true
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
# PermissionsEnabled
|
||||||
|
# When enabled, the Permissions will allow selected users to ignore limitations like PvP, Chest-Block, etc.
|
||||||
|
# When not enabled, all users are treated equally.
|
||||||
|
# Note: The Permission needed for commands, are not affected by this option. So you still need the defined
|
||||||
|
# permissions or op, to use commands, even if this options is disabled!
|
||||||
|
# default: false
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# PermissionKeepInventory
|
||||||
|
# Disables the limitedcreative.keepinventory-Permission, so you can use the separated-inventories-feature, even
|
||||||
|
# if you have a permission plugin that grants ALL permission to you.
|
||||||
|
# If Enabled, only players WITHOUT the limitedcreative.keepinventory-Permission, have separated inventories;
|
||||||
|
# Players with the permission will have the inventory, like this plugin were not installed.
|
||||||
|
# When "PermissionsEnabled" is false, the KeepInventory-Option will act like disabled, even if you set it to true.
|
||||||
|
# default: false
|
||||||
|
keepinventory: false
|
23
LimitedCreative/lang/default.yml
Normal file
23
LimitedCreative/lang/default.yml
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
command:
|
||||||
|
player: player
|
||||||
|
switch:
|
||||||
|
survival: Changes the game mode of a player to survival
|
||||||
|
creative: Changes the game mode of a player to creative
|
||||||
|
condif:
|
||||||
|
overview: storecreative|blockpickup|blocksign|permissions|perm_keepinventory
|
||||||
|
gamemode:
|
||||||
|
changed: "{0}'s game mode has been changed"
|
||||||
|
option:
|
||||||
|
done: Option changed.
|
||||||
|
exception:
|
||||||
|
command:
|
||||||
|
lackingpermission: You do not have access to this command
|
||||||
|
toomuchparameter: Too much arguments given
|
||||||
|
missingparameter: Not enough arguments given
|
||||||
|
playernotfound: Player not found
|
||||||
|
invalidoption: Unknown option
|
||||||
|
config:
|
||||||
|
savefail: Failed to write modified configuration to disk
|
||||||
|
blocked:
|
||||||
|
chest: Access to chests is not allowed in creative mode
|
||||||
|
sign: To interact with signs is not allowed in creative mode
|
|
@ -2,8 +2,39 @@ name: LimitedCreative
|
||||||
main: de.jaschastarke.minecraft.limitedcreative.LimitedCreativeCore
|
main: de.jaschastarke.minecraft.limitedcreative.LimitedCreativeCore
|
||||||
version: 0.1-beta
|
version: 0.1-beta
|
||||||
softdepend: [WorldGuard]
|
softdepend: [WorldGuard]
|
||||||
#commands:
|
commands:
|
||||||
# limitedcreative:
|
limitedcreative:
|
||||||
# description: Manually control the Creative-Features
|
description: Main LimitedCreative-Controlling-Commands
|
||||||
# aliases: lc
|
aliases: lc
|
||||||
# usage: /<command> load
|
usage: /<command> - displays LimitedCreative-Help
|
||||||
|
permissions:
|
||||||
|
limitedcreative.config:
|
||||||
|
description: Allows enabling/disabling of config options ingame
|
||||||
|
default: op
|
||||||
|
limitedcreative.switch_gamemode:
|
||||||
|
description: Allows switching of own game mode to creative and back
|
||||||
|
default: op
|
||||||
|
limitedcreative.switch_gamemode.backonly:
|
||||||
|
description: Allows switching of own game mode to survival, but not to creative
|
||||||
|
default: true
|
||||||
|
limitedcreative.switch_gamemode.other:
|
||||||
|
description: Allows switching of other users game mode
|
||||||
|
default: op
|
||||||
|
limitedcreative.keepinventory:
|
||||||
|
description: Allows bypassing the inventory separation (if PermissionKeepInventory is enabled in config)
|
||||||
|
default: false
|
||||||
|
limitedcreative.nolimit.drop:
|
||||||
|
description: Allows bypassing the "do not drop anything"-limitation
|
||||||
|
default: false
|
||||||
|
limitedcreative.nolimit.pickup:
|
||||||
|
description: Allows bypassing the "do not pickup anything"-limitation
|
||||||
|
default: false
|
||||||
|
limitedcreative.nolimit.chest:
|
||||||
|
description: Allows bypassing the "do not open a chest"-limitation
|
||||||
|
default: false
|
||||||
|
limitedcreative.nolimit.sign:
|
||||||
|
description: Allows bypassing the "do not interact with signs"-limitation
|
||||||
|
default: false
|
||||||
|
limitedcreative.nolimit.pvp:
|
||||||
|
description: Allows bypassing the "no pvp"-limitation
|
||||||
|
default: false
|
|
@ -1,45 +1,196 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative;
|
package de.jaschastarke.minecraft.limitedcreative;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
//import org.bukkit.plugin.PluginManager;
|
import static de.jaschastarke.minecraft.utils.Locale.L;
|
||||||
|
|
||||||
public class Commands {
|
public class Commands {
|
||||||
private static LimitedCreativeCore plugin;
|
private static LimitedCreativeCore plugin;
|
||||||
//private static PluginManager pm;
|
|
||||||
|
|
||||||
public static class MainCommandExecutor implements CommandExecutor {
|
public static class MainCommandExecutor implements CommandExecutor {
|
||||||
|
|
||||||
|
public enum Action {
|
||||||
|
C, CREATIVE,
|
||||||
|
S, SURVIVAL,
|
||||||
|
E, ENABLE,
|
||||||
|
D, DISABLE,
|
||||||
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
Player player = null;
|
if (args.length > 0) {
|
||||||
if (sender instanceof Player) {
|
Action act = null;
|
||||||
player = (Player) sender;
|
try {
|
||||||
} else {
|
act = Action.valueOf(args[0].toUpperCase());
|
||||||
sender.sendMessage("Console-Commands not supported");
|
} catch (IllegalArgumentException e) {}
|
||||||
|
if (act != null) {
|
||||||
|
try {
|
||||||
|
switch (act) {
|
||||||
|
case C:
|
||||||
|
case CREATIVE:
|
||||||
|
this.setGameMode(GameMode.CREATIVE, sender, args);
|
||||||
return true;
|
return true;
|
||||||
|
case S:
|
||||||
|
case SURVIVAL:
|
||||||
|
this.setGameMode(GameMode.SURVIVAL, sender, args);
|
||||||
|
return true;
|
||||||
|
case E:
|
||||||
|
case ENABLE:
|
||||||
|
this.setOption(sender, args, true);
|
||||||
|
return true;
|
||||||
|
case D:
|
||||||
|
case DISABLE:
|
||||||
|
this.setOption(sender, args, false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (CommandException e) {
|
||||||
|
sender.sendMessage(ChatColor.DARK_RED + e.getLocalizedMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.length >= 1 && args[0].equalsIgnoreCase("load")) {
|
String c = label;
|
||||||
if (args.length == 1 || args[1].equalsIgnoreCase("survival") || args[1] == "0") {
|
String message = "";
|
||||||
new Inventory(player).load(GameMode.SURVIVAL);
|
if (sender.hasPermission("limitedcreative.switch_gamemode") || sender.hasPermission("limitedcreative.switch_gamemode.backonly"))
|
||||||
|
message += "/"+c+" s[urvival] ["+L("command.player")+"] - "+L("command.switch.survival")+"\n";
|
||||||
|
if (sender.hasPermission("limitedcreative.switch_gamemode"))
|
||||||
|
message += "/"+c+" c[reative] ["+L("command.player")+"] - "+L("command.switch.creative")+"\n";
|
||||||
|
if (sender.hasPermission("limitedcreative.config"))
|
||||||
|
message += "/"+c+" e[nable] "+L("command.config.overview")+"\n";
|
||||||
|
if (sender.hasPermission("limitedcreative.config"))
|
||||||
|
message += "/"+c+" d[isable] "+L("command.config.overview")+"\n";
|
||||||
|
if (message.length() > 0) {
|
||||||
|
sender.sendMessage("Usage:");
|
||||||
|
for (String m : message.split("\n")) {
|
||||||
|
sender.sendMessage(m);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}/* else if (args.length == 2 && (args[1].equalsIgnoreCase("creative") || args[1] == "1")) {
|
|
||||||
new Inventory(player).load(GameMode.CREATIVE);
|
|
||||||
return true;
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public enum Option {
|
||||||
|
STORECREATIVE,
|
||||||
|
BLOCKPICKUP,
|
||||||
|
BLOCKSIGN,
|
||||||
|
PERMISSIONS,
|
||||||
|
PERM_KEEPINVENTORY,
|
||||||
|
};
|
||||||
|
|
||||||
|
private void setOption(CommandSender sender, String[] args, boolean b) throws CommandException {
|
||||||
|
if (sender instanceof Player && !sender.hasPermission("limitedcreative.config") && !sender.isOp()) {
|
||||||
|
throw new LackingPermissionException();
|
||||||
|
}
|
||||||
|
if (args.length > 2)
|
||||||
|
throw new InvalidCommandException("exception.command.tomuchparameter");
|
||||||
|
if (args.length < 2)
|
||||||
|
throw new InvalidCommandException("exception.command.missingparameter");
|
||||||
|
|
||||||
|
Option opt = null;
|
||||||
|
try {
|
||||||
|
opt = Option.valueOf(args[1].toUpperCase());
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
throw new InvalidCommandException("exception.command.invalidoption");
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (opt) {
|
||||||
|
case STORECREATIVE:
|
||||||
|
plugin.config.setStoreCreative(b);
|
||||||
|
break;
|
||||||
|
case BLOCKPICKUP:
|
||||||
|
plugin.config.setBlockPickupInCreative(b);
|
||||||
|
break;
|
||||||
|
case BLOCKSIGN:
|
||||||
|
plugin.config.setSignBlock(b);
|
||||||
|
break;
|
||||||
|
case PERMISSIONS:
|
||||||
|
plugin.config.setPermissionsEnabled(b);
|
||||||
|
break;
|
||||||
|
case PERM_KEEPINVENTORY:
|
||||||
|
plugin.config.setPermissionToKeepInventory(b);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sender.sendMessage(L("command.option.done"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setGameMode(GameMode gm, CommandSender sender, String[] args) throws CommandException {
|
||||||
|
Player target = null;
|
||||||
|
if (args.length > 2)
|
||||||
|
throw new InvalidCommandException("exception.command.tomuchparameter");
|
||||||
|
if (args.length == 2)
|
||||||
|
target = plugin.getServer().getPlayer(args[1]);
|
||||||
|
else if (sender instanceof Player)
|
||||||
|
target = (Player) sender;
|
||||||
|
|
||||||
|
if (sender instanceof Player && !sender.isOp()) {
|
||||||
|
if (!sender.hasPermission("limitedcreative.switch_gamemode")) {
|
||||||
|
if (gm != GameMode.SURVIVAL || !sender.hasPermission("limitedcreative.switch_gamemode.backonly")) {
|
||||||
|
throw new LackingPermissionException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (sender != target && !sender.hasPermission("limitedcreative.switch_gamemode.other")) {
|
||||||
|
throw new LackingPermissionException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (target == null) {
|
||||||
|
throw new InvalidCommandException("exception.command.playernotfound");
|
||||||
|
}
|
||||||
|
if (target.getGameMode() != gm) {
|
||||||
|
target.setGameMode(gm);
|
||||||
|
if (target != sender) {
|
||||||
|
sender.sendMessage(L("commands.gamemode.changed", target.getName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void register(LimitedCreativeCore pplugin) {
|
public static void register(LimitedCreativeCore pplugin) {
|
||||||
plugin = pplugin;
|
plugin = pplugin;
|
||||||
//pm = plugin.getServer().getPluginManager();
|
|
||||||
|
|
||||||
plugin.getCommand("limitedcreative").setExecutor(new MainCommandExecutor());
|
plugin.getCommand("limitedcreative").setExecutor(new MainCommandExecutor());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract static public class CommandException extends Exception {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public CommandException(String s) {super(s);}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLocalizedMessage() {
|
||||||
|
return L(super.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static class InvalidCommandException extends CommandException {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public InvalidCommandException(String s) {super(s);}
|
||||||
|
}
|
||||||
|
public static class LackingPermissionException extends CommandException {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public LackingPermissionException() {super("exception.command.lackingpermission");}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,102 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative;
|
package de.jaschastarke.minecraft.limitedcreative;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
//import java.io.IOException;
|
||||||
|
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
|
||||||
public class Configuration {
|
import static de.jaschastarke.minecraft.utils.Util.copyFile;
|
||||||
public Configuration(FileConfiguration cfg) {
|
//import static de.jaschastarke.minecraft.utils.Locale.L;
|
||||||
|
|
||||||
|
public class Configuration {
|
||||||
|
private FileConfiguration c;
|
||||||
|
private File file;
|
||||||
|
public static LimitedCreativeCore plugin;
|
||||||
|
|
||||||
|
public Configuration(LimitedCreativeCore pplugin) {
|
||||||
|
plugin = pplugin;
|
||||||
|
|
||||||
|
file = new File(plugin.getDataFolder(), "config.yml");
|
||||||
|
if (!file.exists())
|
||||||
|
//plugin.saveDefaultConfig();
|
||||||
|
copyFile(plugin.getResource("config.yml"), file);
|
||||||
|
|
||||||
|
c = plugin.getConfig();
|
||||||
}
|
}
|
||||||
public boolean getStoreCreative() {
|
public boolean getStoreCreative() {
|
||||||
return true;
|
return c.getBoolean("store.creative", true);
|
||||||
}
|
|
||||||
public boolean getDropInCreative() {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
public String getInventoryFolder() {
|
public String getInventoryFolder() {
|
||||||
return "inventories";
|
return c.getString("store.folder", "inventories");
|
||||||
|
}
|
||||||
|
public boolean getBlockPickupInCreative() {
|
||||||
|
return c.getBoolean("limit.pickup", true);
|
||||||
}
|
}
|
||||||
public boolean getSignBlock() {
|
public boolean getSignBlock() {
|
||||||
return true;
|
return c.getBoolean("limit.sign", true);
|
||||||
|
}
|
||||||
|
public boolean getPermissionsEnabled() {
|
||||||
|
return c.getBoolean("permissions.enabled", false);
|
||||||
|
}
|
||||||
|
public boolean getPermissionToKeepInventory() {
|
||||||
|
return this.getPermissionsEnabled() && c.getBoolean("permissions.keepinventory", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStoreCreative(boolean value) {
|
||||||
|
this.reload();
|
||||||
|
c.set("store.creative", value);
|
||||||
|
this.save();
|
||||||
|
}
|
||||||
|
public void setBlockPickupInCreative(boolean value) {
|
||||||
|
this.reload();
|
||||||
|
c.set("limit.pickup", value);
|
||||||
|
this.save();
|
||||||
|
}
|
||||||
|
public void setSignBlock(boolean value) {
|
||||||
|
this.reload();
|
||||||
|
c.set("limit.sign", value);
|
||||||
|
this.save();
|
||||||
|
}
|
||||||
|
public void setPermissionsEnabled(boolean value) {
|
||||||
|
this.reload();
|
||||||
|
c.set("permissions.enabled", value);
|
||||||
|
this.save();
|
||||||
|
}
|
||||||
|
public void setPermissionToKeepInventory(boolean value) {
|
||||||
|
this.reload();
|
||||||
|
if (value == true)
|
||||||
|
this.setPermissionsEnabled(true);
|
||||||
|
c.set("permissions.keepinventory", value);
|
||||||
|
this.save();
|
||||||
|
}
|
||||||
|
protected void reload() {
|
||||||
|
plugin.reloadConfig();
|
||||||
|
c = plugin.getConfig();
|
||||||
|
}
|
||||||
|
protected void save() {
|
||||||
|
plugin.saveConfig();
|
||||||
|
/*try {
|
||||||
|
c.save(file);
|
||||||
|
} catch (IOException e) {
|
||||||
|
plugin.logger.severe(L("exception.config.savefail"));
|
||||||
|
e.printStackTrace();
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative;
|
package de.jaschastarke.minecraft.limitedcreative;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
|
@ -1,9 +1,29 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative;
|
package de.jaschastarke.minecraft.limitedcreative;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.bukkit.plugin.PluginDescriptionFile;
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import static de.jaschastarke.minecraft.utils.Util.versionCompare;
|
||||||
|
import de.jaschastarke.minecraft.utils.Locale;
|
||||||
|
|
||||||
|
|
||||||
public class LimitedCreativeCore extends JavaPlugin {
|
public class LimitedCreativeCore extends JavaPlugin {
|
||||||
public final Logger logger = Logger.getLogger("Minecraft");
|
public final Logger logger = Logger.getLogger("Minecraft");
|
||||||
|
@ -15,18 +35,21 @@ public class LimitedCreativeCore extends JavaPlugin {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
|
Locale.unload();
|
||||||
logger.info("["+this.getDescription().getName()+"] cleanly unloaded.");
|
logger.info("["+this.getDescription().getName()+"] cleanly unloaded.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
plugin = this;
|
plugin = this;
|
||||||
|
config = new Configuration(this);
|
||||||
serializeFallBack = versionCompare(getServer().getBukkitVersion().replaceAll("-.*$", ""), "1.1") < 0;
|
serializeFallBack = versionCompare(getServer().getBukkitVersion().replaceAll("-.*$", ""), "1.1") < 0;
|
||||||
|
|
||||||
config = new Configuration(this.getConfig());
|
new Locale(this);
|
||||||
|
|
||||||
Listener.register(this);
|
Listener.register(this);
|
||||||
//Commands.register(this);
|
Commands.register(this);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Class.forName("com.sk89q.worldguard.bukkit.WorldGuardPlugin", false, null);
|
Class.forName("com.sk89q.worldguard.bukkit.WorldGuardPlugin", false, null);
|
||||||
worldguard = new WorldGuardIntegration(this);
|
worldguard = new WorldGuardIntegration(this);
|
||||||
|
@ -36,18 +59,4 @@ public class LimitedCreativeCore extends JavaPlugin {
|
||||||
PluginDescriptionFile df = this.getDescription();
|
PluginDescriptionFile df = this.getDescription();
|
||||||
logger.info("["+df.getName() + " v" + df.getVersion() + "] done loading.");
|
logger.info("["+df.getName() + " v" + df.getVersion() + "] done loading.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int versionCompare(String vers1, String vers2) {
|
|
||||||
String[] v1 = vers1.split("\\.");
|
|
||||||
String[] v2 = vers2.split("\\.");
|
|
||||||
int i = 0;
|
|
||||||
while (i < v1.length && i < v2.length && v1[i].equals(v2[i])) {
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if (i < v1.length && i < v2.length) {
|
|
||||||
int diff = new Integer(v1[i]).compareTo(new Integer(v2[i]));
|
|
||||||
return diff < 0 ? -1 : (diff == 0 ? 0 : 1);
|
|
||||||
}
|
|
||||||
return v1.length < v2.length ? -1 : (v1.length == v2.length ? 0 : 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative;
|
package de.jaschastarke.minecraft.limitedcreative;
|
||||||
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
|
@ -20,6 +37,7 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerListener;
|
import org.bukkit.event.player.PlayerListener;
|
||||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
import static de.jaschastarke.minecraft.utils.Locale.L;
|
||||||
|
|
||||||
public final class Listener {
|
public final class Listener {
|
||||||
private static LimitedCreativeCore plugin;
|
private static LimitedCreativeCore plugin;
|
||||||
|
@ -38,14 +56,18 @@ public final class Listener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerDropItem(PlayerDropItemEvent event) {
|
public void onPlayerDropItem(PlayerDropItemEvent event) {
|
||||||
if (event.getPlayer().getGameMode() == GameMode.CREATIVE && !plugin.config.getDropInCreative()) {
|
if (event.getPlayer().getGameMode() == GameMode.CREATIVE) {
|
||||||
|
if (plugin.config.getPermissionsEnabled() && event.getPlayer().hasPermission("limitedcreative.nolimit.drop"))
|
||||||
|
return;
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
||||||
if (event.getPlayer().getGameMode() == GameMode.CREATIVE && !plugin.config.getDropInCreative()) {
|
if (event.getPlayer().getGameMode() == GameMode.CREATIVE && plugin.config.getBlockPickupInCreative()) {
|
||||||
|
if (plugin.config.getPermissionsEnabled() && event.getPlayer().hasPermission("limitedcreative.nolimit.pickup"))
|
||||||
|
return;
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,11 +83,15 @@ public final class Listener {
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
|
|
||||||
if (block.getState() instanceof ContainerBlock) {
|
if (block.getState() instanceof ContainerBlock) {
|
||||||
event.getPlayer().sendMessage("Access to chests is not allowed in creative mode");
|
if (plugin.config.getPermissionsEnabled() && event.getPlayer().hasPermission("limitedcreative.nolimit.chest"))
|
||||||
|
return;
|
||||||
|
event.getPlayer().sendMessage(L("blocked.chest"));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
if (plugin.config.getSignBlock() && block.getState() instanceof Sign) {
|
if (plugin.config.getSignBlock() && block.getState() instanceof Sign) {
|
||||||
event.getPlayer().sendMessage("To interact with signs is not allowed in creative mode");
|
if (plugin.config.getPermissionsEnabled() && event.getPlayer().hasPermission("limitedcreative.nolimit.sign"))
|
||||||
|
return;
|
||||||
|
event.getPlayer().sendMessage(L("blocked.sign"));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,7 +104,9 @@ public final class Listener {
|
||||||
Entity entity = event.getRightClicked();
|
Entity entity = event.getRightClicked();
|
||||||
|
|
||||||
if (entity instanceof StorageMinecart) {
|
if (entity instanceof StorageMinecart) {
|
||||||
event.getPlayer().sendMessage("Access to chests is not allowed in creative mode");
|
if (plugin.config.getPermissionsEnabled() && event.getPlayer().hasPermission("limitedcreative.nolimit.chest"))
|
||||||
|
return;
|
||||||
|
event.getPlayer().sendMessage(L("blocked.chest"));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,11 +127,19 @@ public final class Listener {
|
||||||
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) meta_event;
|
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) meta_event;
|
||||||
if (event.getEntity() instanceof Player && event.getDamager() instanceof Player) {
|
if (event.getEntity() instanceof Player && event.getDamager() instanceof Player) {
|
||||||
// its PVP
|
// its PVP
|
||||||
if (((Player) event.getEntity()).getGameMode() == GameMode.CREATIVE ||
|
Player attacker = (Player) event.getDamager();
|
||||||
((Player) event.getDamager()).getGameMode() == GameMode.CREATIVE) { // one of them is creative
|
Player attacked = (Player) event.getEntity();
|
||||||
|
if (attacker.getGameMode() == GameMode.CREATIVE) {
|
||||||
|
if (!plugin.config.getPermissionsEnabled() || !attacker.hasPermission("limitedcreative.nolimit.pvp")) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (attacked.getGameMode() == GameMode.CREATIVE) {
|
||||||
|
if (!plugin.config.getPermissionsEnabled() || !attacked.hasPermission("limitedcreative.nolimit.pvp")) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative;
|
package de.jaschastarke.minecraft.limitedcreative;
|
||||||
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
|
@ -13,6 +30,8 @@ public class PlayerCore {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onSetCreative() {
|
public void onSetCreative() {
|
||||||
|
if (plugin.config.getPermissionToKeepInventory() && player.hasPermission("limitedcreative.keepinventory"))
|
||||||
|
return;
|
||||||
Inventory inv = new Inventory(player);
|
Inventory inv = new Inventory(player);
|
||||||
inv.save();
|
inv.save();
|
||||||
if (plugin.config.getStoreCreative() && inv.isStored(GameMode.CREATIVE)) {
|
if (plugin.config.getStoreCreative() && inv.isStored(GameMode.CREATIVE)) {
|
||||||
|
@ -22,6 +41,8 @@ public class PlayerCore {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void onSetSurvival() {
|
public void onSetSurvival() {
|
||||||
|
if (plugin.config.getPermissionToKeepInventory() && player.hasPermission("limitedcreative.keepinventory"))
|
||||||
|
return;
|
||||||
Inventory inv = new Inventory(player);
|
Inventory inv = new Inventory(player);
|
||||||
if (plugin.config.getStoreCreative()) {
|
if (plugin.config.getStoreCreative()) {
|
||||||
inv.save();
|
inv.save();
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative;
|
package de.jaschastarke.minecraft.limitedcreative;
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative.serialize;
|
package de.jaschastarke.minecraft.limitedcreative.serialize;
|
||||||
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative.serialize;
|
package de.jaschastarke.minecraft.limitedcreative.serialize;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative.serialize;
|
package de.jaschastarke.minecraft.limitedcreative.serialize;
|
||||||
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2011 Essentials Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package de.jaschastarke.minecraft.utils;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
public class Locale {
|
||||||
|
protected YamlConfiguration lang;
|
||||||
|
private static Locale inst = null;
|
||||||
|
|
||||||
|
public Locale(JavaPlugin plugin) {
|
||||||
|
lang = YamlConfiguration.loadConfiguration(plugin.getResource("lang/default.yml"));
|
||||||
|
inst = this;
|
||||||
|
}
|
||||||
|
public String get(String msg) {
|
||||||
|
if (lang.contains(msg))
|
||||||
|
return lang.getString(msg);
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String L(String msg, Object... objects) {
|
||||||
|
if (inst != null)
|
||||||
|
msg = inst.get(msg);
|
||||||
|
if (objects.length > 0)
|
||||||
|
return MessageFormat.format(msg, objects);
|
||||||
|
else
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
public static void unload() {
|
||||||
|
inst = null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
package de.jaschastarke.minecraft.utils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
final public class Util {
|
||||||
|
public static int versionCompare(String vers1, String vers2) {
|
||||||
|
String[] v1 = vers1.split("\\.");
|
||||||
|
String[] v2 = vers2.split("\\.");
|
||||||
|
int i = 0;
|
||||||
|
while (i < v1.length && i < v2.length && v1[i].equals(v2[i])) {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (i < v1.length && i < v2.length) {
|
||||||
|
int diff = new Integer(v1[i]).compareTo(new Integer(v2[i]));
|
||||||
|
return diff < 0 ? -1 : (diff == 0 ? 0 : 1);
|
||||||
|
}
|
||||||
|
return v1.length < v2.length ? -1 : (v1.length == v2.length ? 0 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void copyFile(InputStream is, File to) {
|
||||||
|
try {
|
||||||
|
OutputStream os;
|
||||||
|
os = new FileOutputStream(to);
|
||||||
|
byte[] buffer = new byte[512];
|
||||||
|
int length;
|
||||||
|
while ((length = is.read(buffer)) > 0) {
|
||||||
|
os.write(buffer, 0, length);
|
||||||
|
}
|
||||||
|
os.close();
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static void copyFile(File from, File to) {
|
||||||
|
try {
|
||||||
|
copyFile(new FileInputStream(from), to);
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue