localization base implementation

commands:
 - switch gamemode
 - change options
permissions:
 - for commands
 - bypass limits
This commit is contained in:
Jascha Starke 2012-01-18 13:54:03 +01:00
parent b7b247f92e
commit a660fab73a
15 changed files with 639 additions and 55 deletions

View 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

View 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

View file

@ -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

View file

@ -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) {}
return true; if (act != null) {
try {
switch (act) {
case C:
case CREATIVE:
this.setGameMode(GameMode.CREATIVE, sender, args);
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"))
return true; message += "/"+c+" s[urvival] ["+L("command.player")+"] - "+L("command.switch.survival")+"\n";
}/* else if (args.length == 2 && (args[1].equalsIgnoreCase("creative") || args[1] == "1")) { if (sender.hasPermission("limitedcreative.switch_gamemode"))
new Inventory(player).load(GameMode.CREATIVE); message += "/"+c+" c[reative] ["+L("command.player")+"] - "+L("command.switch.creative")+"\n";
return true; 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 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");}
}
} }

View file

@ -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();
}*/
} }
} }

View file

@ -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;

View 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);
}
} }

View file

@ -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,9 +127,17 @@ 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();
event.setCancelled(true); if (attacker.getGameMode() == GameMode.CREATIVE) {
if (!plugin.config.getPermissionsEnabled() || !attacker.hasPermission("limitedcreative.nolimit.pvp")) {
event.setCancelled(true);
}
}
if (attacked.getGameMode() == GameMode.CREATIVE) {
if (!plugin.config.getPermissionsEnabled() || !attacked.hasPermission("limitedcreative.nolimit.pvp")) {
event.setCancelled(true);
}
} }
} }
} }

View file

@ -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();

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;
}
}

View file

@ -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();
}
}
}