1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-08 07:36:42 +02:00

Merge branch 'essmaster' into essrelease

This commit is contained in:
KHobbits
2011-11-08 05:17:42 +00:00
123 changed files with 9358 additions and 6466 deletions

View File

@@ -601,6 +601,13 @@ is divided into following sections:
<propertyfile file="${built-jar.properties}"> <propertyfile file="${built-jar.properties}">
<entry key="${basedir}" value=""/> <entry key="${basedir}" value=""/>
</propertyfile> </propertyfile>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-jar.properties}"/>
<param location="${project.EssentialsGroupManager}" name="call.subproject"/>
<param location="${project.EssentialsGroupManager}/build.xml" name="call.script"/>
<param name="call.target" value="jar"/>
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
</antcall>
</target> </target>
<target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/> <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
<target depends="init" name="-check-automatic-build"> <target depends="init" name="-check-automatic-build">
@@ -1038,6 +1045,13 @@ is divided into following sections:
<propertyfile file="${built-clean.properties}"> <propertyfile file="${built-clean.properties}">
<entry key="${basedir}" value=""/> <entry key="${basedir}" value=""/>
</propertyfile> </propertyfile>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-clean.properties}"/>
<param location="${project.EssentialsGroupManager}" name="call.subproject"/>
<param location="${project.EssentialsGroupManager}/build.xml" name="call.script"/>
<param name="call.target" value="clean"/>
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
</antcall>
</target> </target>
<target depends="init" name="-do-clean"> <target depends="init" name="-do-clean">
<delete dir="${build.dir}"/> <delete dir="${build.dir}"/>

View File

@@ -3,8 +3,8 @@ build.xml.script.CRC32=3233ee78
build.xml.stylesheet.CRC32=28e38971@1.38.2.45 build.xml.stylesheet.CRC32=28e38971@1.38.2.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=4b596d89 nbproject/build-impl.xml.data.CRC32=a830bc14
nbproject/build-impl.xml.script.CRC32=dbc81ee1 nbproject/build-impl.xml.script.CRC32=64a00ba6
nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45
nbproject/profiler-build-impl.xml.data.CRC32=ab78ce15 nbproject/profiler-build-impl.xml.data.CRC32=ab78ce15
nbproject/profiler-build-impl.xml.script.CRC32=abda56ed nbproject/profiler-build-impl.xml.script.CRC32=abda56ed

View File

@@ -68,7 +68,7 @@ file.reference.craftbukkit-0.0.1-SNAPSHOT.jar=..\\lib\\craftbukkit-0.0.1-SNAPSHO
file.reference.iCo4.jar=../lib/iCo4.jar file.reference.iCo4.jar=../lib/iCo4.jar
file.reference.iCo5.jar=../lib/iCo5.jar file.reference.iCo5.jar=../lib/iCo5.jar
file.reference.iCo6.jar=../lib/iCo6.jar file.reference.iCo6.jar=../lib/iCo6.jar
file.reference.junit-4.5.jar=..\\lib\\junit_4\\junit-4.5.jar file.reference.junit-4.5.jar=../lib/junit_4/junit-4.5.jar
file.reference.lombok-0.10.1.jar=../lib/lombok-0.10.1.jar file.reference.lombok-0.10.1.jar=../lib/lombok-0.10.1.jar
file.reference.MultiCurrency.jar=../lib/MultiCurrency.jar file.reference.MultiCurrency.jar=../lib/MultiCurrency.jar
file.reference.Permissions3.jar=../lib/Permissions3.jar file.reference.Permissions3.jar=../lib/Permissions3.jar
@@ -80,7 +80,6 @@ jar.compress=true
jar.index=${jnlp.enabled} jar.index=${jnlp.enabled}
javac.classpath=\ javac.classpath=\
${file.reference.Permissions3.jar}:\ ${file.reference.Permissions3.jar}:\
${file.reference.craftbukkit-0.0.1-SNAPSHOT.jar}:\
${file.reference.iCo4.jar}:\ ${file.reference.iCo4.jar}:\
${file.reference.iCo5.jar}:\ ${file.reference.iCo5.jar}:\
${file.reference.iCo6.jar}:\ ${file.reference.iCo6.jar}:\
@@ -89,7 +88,9 @@ javac.classpath=\
${file.reference.PermissionsEx.jar}:\ ${file.reference.PermissionsEx.jar}:\
${file.reference.bPermissions.jar}:\ ${file.reference.bPermissions.jar}:\
${file.reference.PermissionsBukkit-1.2.jar}:\ ${file.reference.PermissionsBukkit-1.2.jar}:\
${file.reference.lombok-0.10.1.jar} ${file.reference.lombok-0.10.1.jar}:\
${reference.EssentialsGroupManager.jar}:\
${file.reference.craftbukkit-0.0.1-SNAPSHOT.jar}
# Space-separated list of extra javac options # Space-separated list of extra javac options
javac.compilerargs= javac.compilerargs=
javac.deprecation=false javac.deprecation=false
@@ -110,6 +111,7 @@ javadoc.noindex=false
javadoc.nonavbar=false javadoc.nonavbar=false
javadoc.notree=false javadoc.notree=false
javadoc.private=false javadoc.private=false
javadoc.reference.PermissionsEx.jar=../lib/PermissionsEx-javadoc.jar
javadoc.splitindex=true javadoc.splitindex=true
javadoc.use=true javadoc.use=true
javadoc.version=false javadoc.version=false
@@ -126,6 +128,8 @@ jnlp.signing.keystore=
meta.inf.dir=${src.dir}/META-INF meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=true mkdist.disabled=true
platform.active=default_platform platform.active=default_platform
project.EssentialsGroupManager=../EssentialsGroupManager
reference.EssentialsGroupManager.jar=../EssentialsGroupManager/dist/EssentialsGroupManager.jar
run.classpath=\ run.classpath=\
${javac.classpath}:\ ${javac.classpath}:\
${build.classes.dir} ${build.classes.dir}

View File

@@ -14,6 +14,15 @@
<libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1"> <libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
<definitions>../lib/nblibraries.properties</definitions> <definitions>../lib/nblibraries.properties</definitions>
</libraries> </libraries>
<references xmlns="http://www.netbeans.org/ns/ant-project-references/1"/> <references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
<reference>
<foreign-project>EssentialsGroupManager</foreign-project>
<artifact-type>jar</artifact-type>
<script>build.xml</script>
<target>jar</target>
<clean-target>clean</clean-target>
<id>jar</id>
</reference>
</references>
</configuration> </configuration>
</project> </project>

View File

@@ -33,7 +33,6 @@ import com.earth2me.essentials.register.payment.Methods;
import com.earth2me.essentials.signs.SignBlockListener; import com.earth2me.essentials.signs.SignBlockListener;
import com.earth2me.essentials.signs.SignEntityListener; import com.earth2me.essentials.signs.SignEntityListener;
import com.earth2me.essentials.signs.SignPlayerListener; import com.earth2me.essentials.signs.SignPlayerListener;
import java.math.BigInteger;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommand;
@@ -58,12 +57,10 @@ public class Essentials extends JavaPlugin implements IEssentials
private transient List<IConf> confList; private transient List<IConf> confList;
private transient Backup backup; private transient Backup backup;
private transient ItemDb itemDb; private transient ItemDb itemDb;
private transient EssentialsUpdateTimer updateTimer;
private transient final Methods paymentMethod = new Methods(); private transient final Methods paymentMethod = new Methods();
private transient final static boolean enableErrorLogging = false;
private transient final EssentialsErrorHandler errorHandler = new EssentialsErrorHandler();
private transient PermissionsHandler permissionsHandler; private transient PermissionsHandler permissionsHandler;
private transient UserMap userMap; private transient UserMap userMap;
private transient ExecuteTimer execTimer;
@Override @Override
public ISettings getSettings() public ISettings getSettings()
@@ -94,32 +91,36 @@ public class Essentials extends JavaPlugin implements IEssentials
@Override @Override
public void onEnable() public void onEnable()
{ {
execTimer = new ExecuteTimer();
execTimer.start();
final String[] javaversion = System.getProperty("java.version").split("\\.", 3); final String[] javaversion = System.getProperty("java.version").split("\\.", 3);
if (javaversion == null || javaversion.length < 2 || Integer.parseInt(javaversion[1]) < 6) if (javaversion == null || javaversion.length < 2 || Integer.parseInt(javaversion[1]) < 6)
{ {
LOGGER.log(Level.SEVERE, "Java version not supported! Please install Java 1.6. You have " + System.getProperty("java.version")); LOGGER.log(Level.SEVERE, "Java version not supported! Please install Java 1.6. You have " + System.getProperty("java.version"));
} }
if (enableErrorLogging)
{
LOGGER.addHandler(errorHandler);
}
final EssentialsUpgrade upgrade = new EssentialsUpgrade(this); final EssentialsUpgrade upgrade = new EssentialsUpgrade(this);
upgrade.beforeSettings(); upgrade.beforeSettings();
execTimer.mark("Upgrade");
confList = new ArrayList<IConf>(); confList = new ArrayList<IConf>();
settings = new Settings(this); settings = new Settings(this);
confList.add(settings); confList.add(settings);
execTimer.mark("Settings");
upgrade.afterSettings(); upgrade.afterSettings();
execTimer.mark("Upgrade2");
Util.updateLocale(settings.getLocale(), this); Util.updateLocale(settings.getLocale(), this);
userMap = new UserMap(this); userMap = new UserMap(this);
confList.add(userMap); confList.add(userMap);
execTimer.mark("Init(Usermap)");
spawn = new Spawn(getServer(), this.getDataFolder()); spawn = new Spawn(getServer(), this.getDataFolder());
confList.add(spawn); confList.add(spawn);
warps = new Warps(getServer(), this.getDataFolder()); warps = new Warps(getServer(), this.getDataFolder());
confList.add(warps); confList.add(warps);
execTimer.mark("Init(Spawn/Warp)");
worth = new Worth(this.getDataFolder()); worth = new Worth(this.getDataFolder());
confList.add(worth); confList.add(worth);
itemDb = new ItemDb(this); itemDb = new ItemDb(this);
confList.add(itemDb); confList.add(itemDb);
execTimer.mark("Init(Worth/ItemDB)");
reload(); reload();
backup = new Backup(this); backup = new Backup(this);
@@ -188,8 +189,10 @@ public class Essentials extends JavaPlugin implements IEssentials
pm.registerEvent(Type.ENTITY_DAMAGE, entityListener, Priority.Lowest, this); pm.registerEvent(Type.ENTITY_DAMAGE, entityListener, Priority.Lowest, this);
pm.registerEvent(Type.ENTITY_COMBUST, entityListener, Priority.Lowest, this); pm.registerEvent(Type.ENTITY_COMBUST, entityListener, Priority.Lowest, this);
pm.registerEvent(Type.ENTITY_DEATH, entityListener, Priority.Lowest, this); pm.registerEvent(Type.ENTITY_DEATH, entityListener, Priority.Lowest, this);
pm.registerEvent(Type.ENTITY_REGAIN_HEALTH, entityListener, Priority.Lowest, this);
pm.registerEvent(Type.FOOD_LEVEL_CHANGE, entityListener, Priority.Lowest, this); pm.registerEvent(Type.FOOD_LEVEL_CHANGE, entityListener, Priority.Lowest, this);
//TODO: Check if this should be here, and not above before reload()
jail = new Jail(this); jail = new Jail(this);
final JailPlayerListener jailPlayerListener = new JailPlayerListener(this); final JailPlayerListener jailPlayerListener = new JailPlayerListener(this);
confList.add(jail); confList.add(jail);
@@ -206,19 +209,19 @@ public class Essentials extends JavaPlugin implements IEssentials
final EssentialsTimer timer = new EssentialsTimer(this); final EssentialsTimer timer = new EssentialsTimer(this);
getScheduler().scheduleSyncRepeatingTask(this, timer, 1, 100); getScheduler().scheduleSyncRepeatingTask(this, timer, 1, 100);
Economy.setEss(this); Economy.setEss(this);
if (getSettings().isUpdateEnabled()) execTimer.mark("RegListeners");
{
updateTimer = new EssentialsUpdateTimer(this);
getScheduler().scheduleAsyncRepeatingTask(this, updateTimer, 20 * 60 * 10, 20 * 3600 * 6);
}
LOGGER.info(Util.format("loadinfo", this.getDescription().getName(), this.getDescription().getVersion(), Util.joinList(this.getDescription().getAuthors()))); LOGGER.info(Util.format("loadinfo", this.getDescription().getName(), this.getDescription().getVersion(), Util.joinList(this.getDescription().getAuthors())));
final String timeroutput = execTimer.end();
if (getSettings().isDebug())
{
LOGGER.log(Level.INFO, "Essentials load " + timeroutput);
}
} }
@Override @Override
public void onDisable() public void onDisable()
{ {
Trade.closeLog(); Trade.closeLog();
LOGGER.removeHandler(errorHandler);
} }
@Override @Override
@@ -229,6 +232,7 @@ public class Essentials extends JavaPlugin implements IEssentials
for (IConf iConf : confList) for (IConf iConf : confList)
{ {
iConf.reloadConfig(); iConf.reloadConfig();
execTimer.mark("Reload(" + iConf.getClass().getSimpleName() + ")");
} }
Util.updateLocale(settings.getLocale(), this); Util.updateLocale(settings.getLocale(), this);
@@ -478,14 +482,6 @@ public class Essentials extends JavaPlugin implements IEssentials
{ {
LOGGER.log(logRecord); LOGGER.log(logRecord);
} }
else
{
if (enableErrorLogging)
{
errorHandler.publish(logRecord);
errorHandler.flush();
}
}
} }
@Override @Override
@@ -608,10 +604,12 @@ public class Essentials extends JavaPlugin implements IEssentials
@Override @Override
public int broadcastMessage(final IUser sender, final String message) public int broadcastMessage(final IUser sender, final String message)
{ {
if (sender == null) { if (sender == null)
{
return getServer().broadcastMessage(message); return getServer().broadcastMessage(message);
} }
if (sender.isHidden()) { if (sender.isHidden())
{
return 0; return 0;
} }
final Player[] players = getServer().getOnlinePlayers(); final Player[] players = getServer().getOnlinePlayers();
@@ -628,11 +626,6 @@ public class Essentials extends JavaPlugin implements IEssentials
return players.length; return players.length;
} }
public Map<BigInteger, String> getErrors()
{
return errorHandler.getErrors();
}
@Override @Override
public int scheduleAsyncDelayedTask(final Runnable run) public int scheduleAsyncDelayedTask(final Runnable run)
{ {

View File

@@ -1,6 +1,8 @@
package com.earth2me.essentials; package com.earth2me.essentials;
import java.util.List; import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityCombustEvent;
@@ -8,6 +10,8 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityListener; import org.bukkit.event.entity.EntityListener;
import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -15,6 +19,7 @@ import org.bukkit.inventory.ItemStack;
public class EssentialsEntityListener extends EntityListener public class EssentialsEntityListener extends EntityListener
{ {
private static final Logger LOGGER = Logger.getLogger("Minecraft");
private final IEssentials ess; private final IEssentials ess;
public EssentialsEntityListener(IEssentials ess) public EssentialsEntityListener(IEssentials ess)
@@ -34,6 +39,7 @@ public class EssentialsEntityListener extends EntityListener
{ {
User defender = ess.getUser(eDefend); User defender = ess.getUser(eDefend);
User attacker = ess.getUser(eAttack); User attacker = ess.getUser(eAttack);
attacker.updateActivity(true);
ItemStack is = attacker.getItemInHand(); ItemStack is = attacker.getItemInHand();
List<String> commandList = attacker.getPowertool(is); List<String> commandList = attacker.getPowertool(is);
if (commandList != null && !commandList.isEmpty()) if (commandList != null && !commandList.isEmpty())
@@ -93,8 +99,16 @@ public class EssentialsEntityListener extends EntityListener
{ {
if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled()) if (event.getEntity() instanceof Player && ess.getUser(event.getEntity()).isGodModeEnabled())
{ {
//TODO: Remove the following line, when we're happy to remove backwards compatability with 1185. event.setCancelled(true);
event.setFoodLevel(20); }
}
@Override
public void onEntityRegainHealth(EntityRegainHealthEvent event)
{
if (event.getRegainReason() == RegainReason.SATIATED && event.getEntity() instanceof Player
&& ess.getUser(event.getEntity()).isAfk() && ess.getSettings().getFreezeAfkPlayers())
{
event.setCancelled(true); event.setCancelled(true);
} }
} }

View File

@@ -1,128 +0,0 @@
package com.earth2me.essentials;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
class EssentialsErrorHandler extends Handler
{
private final Map<BigInteger, String> errors = new HashMap<BigInteger, String>();
private final List<LogRecord> records = new LinkedList<LogRecord>();
public EssentialsErrorHandler()
{
}
@Override
public void publish(LogRecord lr)
{
if (lr.getThrown() == null || lr.getLevel().intValue() < Level.WARNING.intValue())
{
return;
}
synchronized (records)
{
records.add(lr);
}
}
@Override
public void flush()
{
synchronized (records)
{
sortRecords();
}
}
@Override
public void close() throws SecurityException
{
synchronized (records)
{
sortRecords();
}
}
private void sortRecords()
{
for (LogRecord lr : records)
{
try
{
if (lr.getThrown() == null)
{
return;
}
Throwable tr = lr.getThrown();
StackTraceElement[] elements = tr.getStackTrace();
if (elements == null || elements.length <= 0)
{
return;
}
boolean essentialsFound = false;
for (StackTraceElement stackTraceElement : elements)
{
if (stackTraceElement.getClassName().contains("com.earth2me.essentials"))
{
essentialsFound = true;
break;
}
}
if (!essentialsFound && tr.getCause() != null)
{
Throwable cause = tr.getCause();
StackTraceElement[] elements2 = cause.getStackTrace();
if (elements2 != null)
{
for (StackTraceElement stackTraceElement : elements2)
{
if (stackTraceElement.getClassName().contains("com.earth2me.essentials"))
{
essentialsFound = true;
break;
}
}
}
}
StringBuilder sb = new StringBuilder();
sb.append("[").append(lr.getLevel().getName()).append("] ").append(lr.getMessage()).append("\n");
sb.append(tr.getMessage()).append("\n");
for (StackTraceElement stackTraceElement : tr.getStackTrace())
{
sb.append(stackTraceElement.toString()).append("\n");
}
if (tr.getCause() != null && tr.getCause().getStackTrace() != null)
{
sb.append(tr.getCause().getMessage()).append("\n");
for (StackTraceElement stackTraceElement : tr.getCause().getStackTrace())
{
sb.append(stackTraceElement.toString()).append("\n");
}
}
String errorReport = sb.toString();
byte[] bytesOfMessage = errorReport.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
BigInteger bi = new BigInteger(md.digest(bytesOfMessage));
errors.put(bi, errorReport);
}
catch (Throwable t)
{
//Ignore all exceptions inside the exception handler
}
}
records.clear();
}
Map<BigInteger, String> getErrors()
{
return errors;
}
}

View File

@@ -47,7 +47,6 @@ public class EssentialsPlayerListener extends PlayerListener
public void onPlayerRespawn(final PlayerRespawnEvent event) public void onPlayerRespawn(final PlayerRespawnEvent event)
{ {
final User user = ess.getUser(event.getPlayer()); final User user = ess.getUser(event.getPlayer());
user.setDisplayNick(user.getNick());
updateCompass(user); updateCompass(user);
if (ess.getSettings().changeDisplayName()) if (ess.getSettings().changeDisplayName())
{ {
@@ -169,6 +168,7 @@ public class EssentialsPlayerListener extends PlayerListener
{ {
user.setDisplayNick(user.getNick()); user.setDisplayNick(user.getNick());
} }
user.setLastLoginAddress(user.getAddress().getAddress().getHostAddress());
user.updateActivity(false); user.updateActivity(false);
if (user.isAuthorized("essentials.sleepingignored")) if (user.isAuthorized("essentials.sleepingignored"))
{ {
@@ -213,7 +213,7 @@ public class EssentialsPlayerListener extends PlayerListener
user.setNPC(false); user.setNPC(false);
final long currentTime = System.currentTimeMillis(); final long currentTime = System.currentTimeMillis();
boolean banExpired = user.checkBanTimeout(currentTime); final boolean banExpired = user.checkBanTimeout(currentTime);
user.checkMuteTimeout(currentTime); user.checkMuteTimeout(currentTime);
user.checkJailTimeout(currentTime); user.checkJailTimeout(currentTime);
@@ -319,6 +319,8 @@ public class EssentialsPlayerListener extends PlayerListener
@Override @Override
public void onPlayerAnimation(final PlayerAnimationEvent event) public void onPlayerAnimation(final PlayerAnimationEvent event)
{ {
final User user = ess.getUser(event.getPlayer());
user.updateActivity(true);
usePowertools(event); usePowertools(event);
} }

View File

@@ -1,84 +0,0 @@
package com.earth2me.essentials;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.bukkit.entity.Player;
class EssentialsUpdateTimer implements Runnable
{
private transient URL url;
private final transient IEssentials ess;
private static final Logger LOGGER = Logger.getLogger("Minecraft");
private final transient Pattern pattern = Pattern.compile("git-Bukkit-([0-9]+).([0-9]+).([0-9]+)-[0-9]+-[0-9a-z]+-b([0-9]+)jnks.*");
public EssentialsUpdateTimer(final IEssentials ess)
{
this.ess = ess;
try
{
url = new URL("http://essentialsupdate.appspot.com/check");
}
catch (MalformedURLException ex)
{
LOGGER.log(Level.SEVERE, "Invalid url!", ex);
}
}
@Override
public void run()
{
try
{
final StringBuilder builder = new StringBuilder();
String bukkitVersion = ess.getServer().getVersion();
final Matcher versionMatch = pattern.matcher(bukkitVersion);
if (versionMatch.matches())
{
bukkitVersion = versionMatch.group(4);
}
builder.append("v=").append(URLEncoder.encode(ess.getDescription().getVersion(), "UTF-8"));
builder.append("&b=").append(URLEncoder.encode(bukkitVersion, "UTF-8"));
final URLConnection conn = url.openConnection();
conn.setConnectTimeout(10000);
conn.setDoOutput(true);
conn.connect();
final OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(builder.toString());
writer.flush();
final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
final String ret = reader.readLine();
writer.close();
reader.close();
if (!ret.isEmpty() && !ret.equalsIgnoreCase("OK"))
{
LOGGER.log(Level.INFO, "Essentials Update-Check: " + ret);
if (ret.startsWith("New Version"))
{
for (Player player : ess.getServer().getOnlinePlayers())
{
final User user = ess.getUser(player);
if (user.isAuthorized("essentials.admin.notices.update"))
{
user.sendMessage(ret);
}
}
}
}
}
catch (IOException ex)
{
LOGGER.log(Level.SEVERE, "Failed to open connection", ex);
}
}
}

View File

@@ -0,0 +1,84 @@
package com.earth2me.essentials;
import java.util.ArrayList;
import java.util.List;
public class ExecuteTimer
{
private final List<ExecuteRecord> times;
public ExecuteTimer()
{
times = new ArrayList<ExecuteRecord>();
}
public void start()
{
times.clear();
mark("start");
}
public void mark(final String label)
{
if (!times.isEmpty() || "start".equals(label))
{
times.add(new ExecuteRecord(label, System.currentTimeMillis()));
}
}
public String end()
{
final StringBuilder output = new StringBuilder();
output.append("execution time: ");
String mark;
long time0 = 0;
long time1 = 0;
long time2 = 0;
long duration;
for (ExecuteRecord pair : times)
{
mark = (String)pair.getMark();
time2 = (Long)pair.getTime();
if (time1 > 0)
{
duration = time2 - time1;
output.append(mark).append(": ").append(duration).append("ms - ");
}
else
{
time0 = time2;
}
time1 = time2;
}
duration = time1 - time0;
output.append("Total: ").append(duration).append("ms");
times.clear();
return output.toString();
}
static private class ExecuteRecord
{
private final String mark;
private final long time;
public ExecuteRecord(final String mark, final long time)
{
this.mark = mark;
this.time = time;
}
public String getMark()
{
return mark;
}
public long getTime()
{
return time;
}
}
}

View File

@@ -124,8 +124,10 @@ public interface ISettings extends IConf
boolean useBukkitPermissions(); boolean useBukkitPermissions();
boolean addPrefixSuffix(); boolean addPrefixSuffix();
boolean isUpdateEnabled(); boolean disablePrefix();
boolean disableSuffix();
long getAutoAfk(); long getAutoAfk();
@@ -134,4 +136,6 @@ public interface ISettings extends IConf
boolean getFreezeAfkPlayers(); boolean getFreezeAfkPlayers();
boolean areDeathMessagesEnabled(); boolean areDeathMessagesEnabled();
public void setDebug(boolean debug);
} }

View File

@@ -378,10 +378,12 @@ public class Settings implements ISettings
return config.getBoolean("protect.disable.warn-on-build-disallow", false); return config.getBoolean("protect.disable.warn-on-build-disallow", false);
} }
private boolean debug = false;
@Override @Override
public boolean isDebug() public boolean isDebug()
{ {
return config.getBoolean("debug", false); return debug || config.getBoolean("debug", false);
} }
@Override @Override
@@ -498,11 +500,15 @@ public class Settings implements ISettings
{ {
return config.getBoolean("add-prefix-suffix", ess.getServer().getPluginManager().isPluginEnabled("EssentialsChat")); return config.getBoolean("add-prefix-suffix", ess.getServer().getPluginManager().isPluginEnabled("EssentialsChat"));
} }
@Override public boolean disablePrefix()
public boolean isUpdateEnabled()
{ {
return config.getBoolean("update-check", false); return config.getBoolean("disablePrefix", false);
}
public boolean disableSuffix()
{
return config.getBoolean("disableSuffix", false);
} }
@Override @Override
@@ -528,4 +534,10 @@ public class Settings implements ISettings
{ {
return config.getBoolean("death-messages", true); return config.getBoolean("death-messages", true);
} }
@Override
public void setDebug(final boolean debug)
{
this.debug = debug;
}
} }

View File

@@ -9,20 +9,23 @@ import org.bukkit.Server;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.World.Environment; import org.bukkit.World.Environment;
public class Spawn implements IConf {
public class Spawn implements IConf
{
private static final Logger logger = Logger.getLogger("Minecraft"); private static final Logger logger = Logger.getLogger("Minecraft");
private final EssentialsConf config; private final EssentialsConf config;
private final Server server; private final Server server;
public Spawn(Server server, File dataFolder) { public Spawn(Server server, File dataFolder)
{
File configFile = new File(dataFolder, "spawn.yml"); File configFile = new File(dataFolder, "spawn.yml");
this.server = server; this.server = server;
config = new EssentialsConf(configFile); config = new EssentialsConf(configFile);
config.load(); config.load();
} }
public void setSpawn(Location loc, String group) { public void setSpawn(Location loc, String group)
{
Map<String, Object> map = new HashMap<String, Object>(); Map<String, Object> map = new HashMap<String, Object>();
map.put("world", loc.getWorld().getName()); map.put("world", loc.getWorld().getName());
map.put("x", loc.getX()); map.put("x", loc.getX());
@@ -33,18 +36,24 @@ public class Spawn implements IConf {
config.setProperty(group, map); config.setProperty(group, map);
config.save(); config.save();
if ("default".equals(group)) { if ("default".equals(group))
{
loc.getWorld().setSpawnLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); loc.getWorld().setSpawnLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
} }
} }
public Location getSpawn(String group) { public Location getSpawn(String group)
if (config.getProperty(group) == null) { {
if (config.getProperty(group) == null)
{
group = "default"; group = "default";
} }
if (config.getProperty(group) == null) { if (config.getProperty(group) == null)
for (World w : server.getWorlds()) { {
if (w.getEnvironment() != Environment.NORMAL) { for (World w : server.getWorlds())
{
if (w.getEnvironment() != Environment.NORMAL)
{
continue; continue;
} }
return w.getSpawnLocation(); return w.getSpawnLocation();
@@ -52,15 +61,19 @@ public class Spawn implements IConf {
} }
String worldId = config.getString(group + ".world", ""); String worldId = config.getString(group + ".world", "");
World world = server.getWorlds().get(server.getWorlds().size() > 1 ? 1 : 0); World world = server.getWorlds().get(server.getWorlds().size() > 1 ? 1 : 0);
for (World w : server.getWorlds()) { for (World w : server.getWorlds())
if (w.getEnvironment() != Environment.NORMAL) { {
if (w.getEnvironment() != Environment.NORMAL)
{
continue; continue;
} }
world = w; world = w;
break; break;
} }
for (World w : server.getWorlds()) { for (World w : server.getWorlds())
if (!w.getName().equals(worldId)) { {
if (!w.getName().equals(worldId))
{
continue; continue;
} }
world = w; world = w;
@@ -70,18 +83,20 @@ public class Spawn implements IConf {
double x = config.getDouble(group + ".x", config.getDouble("default.x", 0)); double x = config.getDouble(group + ".x", config.getDouble("default.x", 0));
double y = config.getDouble(group + ".y", config.getDouble("default.y", 0)); double y = config.getDouble(group + ".y", config.getDouble("default.y", 0));
double z = config.getDouble(group + ".z", config.getDouble("default.z", 0)); double z = config.getDouble(group + ".z", config.getDouble("default.z", 0));
float yaw = (float) config.getDouble(group + ".yaw", config.getDouble("default.yaw", 0)); float yaw = (float)config.getDouble(group + ".yaw", config.getDouble("default.yaw", 0));
float pitch = (float) config.getDouble(group + ".pitch", config.getDouble("default.pitch", 0)); float pitch = (float)config.getDouble(group + ".pitch", config.getDouble("default.pitch", 0));
Location retval = new Location(world, x, y, z, yaw, pitch); Location retval = new Location(world, x, y, z, yaw, pitch);
if (y < 1) { if (y < 1)
{
retval.setY(world.getHighestBlockYAt(retval)); retval.setY(world.getHighestBlockYAt(retval));
} }
return retval; return retval;
} }
public void reloadConfig() { public void reloadConfig()
{
config.load(); config.load();
} }
} }

View File

@@ -37,7 +37,8 @@ public class TNTExplodeListener extends EntityListener implements Runnable
timer = ess.scheduleSyncDelayedTask(this, 1000); timer = ess.scheduleSyncDelayedTask(this, 1000);
return; return;
} }
if (timer != -1) { if (timer != -1)
{
ess.getScheduler().cancelTask(timer); ess.getScheduler().cancelTask(timer);
timer = ess.scheduleSyncDelayedTask(this, 1000); timer = ess.scheduleSyncDelayedTask(this, 1000);
} }
@@ -54,28 +55,31 @@ public class TNTExplodeListener extends EntityListener implements Runnable
{ {
return; return;
} }
try { try
final Set<ChunkPosition> set = new HashSet<ChunkPosition>(event.blockList().size());
final Player[] players = ess.getServer().getOnlinePlayers();
final List<ChunkPosition> blocksUnderPlayers = new ArrayList<ChunkPosition>(players.length);
final Location loc = event.getLocation();
for (Player player : players)
{ {
if (player.getWorld().equals(loc.getWorld())) final Set<ChunkPosition> set = new HashSet<ChunkPosition>(event.blockList().size());
final Player[] players = ess.getServer().getOnlinePlayers();
final List<ChunkPosition> blocksUnderPlayers = new ArrayList<ChunkPosition>(players.length);
final Location loc = event.getLocation();
for (Player player : players)
{ {
blocksUnderPlayers.add(new ChunkPosition(player.getLocation().getBlockX(), player.getLocation().getBlockY() - 1, player.getLocation().getBlockZ())); if (player.getWorld().equals(loc.getWorld()))
{
blocksUnderPlayers.add(new ChunkPosition(player.getLocation().getBlockX(), player.getLocation().getBlockY() - 1, player.getLocation().getBlockZ()));
}
} }
for (Block block : event.blockList())
{
final ChunkPosition cp = new ChunkPosition(block.getX(), block.getY(), block.getZ());
if (!blocksUnderPlayers.contains(cp))
{
set.add(cp);
}
}
((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0F, set));
} }
for (Block block : event.blockList()) catch (Throwable ex)
{ {
final ChunkPosition cp = new ChunkPosition(block.getX(), block.getY(), block.getZ());
if (!blocksUnderPlayers.contains(cp))
{
set.add(cp);
}
}
((CraftServer)ess.getServer()).getHandle().sendPacketNearby(loc.getX(), loc.getY(), loc.getZ(), 64.0, ((CraftWorld)loc.getWorld()).getHandle().worldProvider.dimension, new Packet60Explosion(loc.getX(), loc.getY(), loc.getZ(), 3.0F, set));
} catch (Throwable ex) {
Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex); Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex);
} }
event.setCancelled(true); event.setCancelled(true);

View File

@@ -18,22 +18,22 @@ public class Trade
private final transient Double money; private final transient Double money;
private final transient ItemStack itemStack; private final transient ItemStack itemStack;
private final transient IEssentials ess; private final transient IEssentials ess;
public Trade(final String command, final IEssentials ess) public Trade(final String command, final IEssentials ess)
{ {
this(command, null, null, ess); this(command, null, null, ess);
} }
public Trade(final double money, final IEssentials ess) public Trade(final double money, final IEssentials ess)
{ {
this(null, money, null, ess); this(null, money, null, ess);
} }
public Trade(final ItemStack items, final IEssentials ess) public Trade(final ItemStack items, final IEssentials ess)
{ {
this(null, null, items, ess); this(null, null, items, ess);
} }
private Trade(final String command, final Double money, final ItemStack item, final IEssentials ess) private Trade(final String command, final Double money, final ItemStack item, final IEssentials ess)
{ {
this.command = command; this.command = command;
@@ -41,7 +41,7 @@ public class Trade
this.itemStack = item; this.itemStack = item;
this.ess = ess; this.ess = ess;
} }
public void isAffordableFor(final IUser user) throws ChargeException public void isAffordableFor(final IUser user) throws ChargeException
{ {
final double mon = user.getMoney(); final double mon = user.getMoney();
@@ -52,13 +52,13 @@ public class Trade
{ {
throw new ChargeException(Util.i18n("notEnoughMoney")); throw new ChargeException(Util.i18n("notEnoughMoney"));
} }
if (getItemStack() != null if (getItemStack() != null
&& !InventoryWorkaround.containsItem(user.getInventory(), true, itemStack)) && !InventoryWorkaround.containsItem(user.getInventory(), true, itemStack))
{ {
throw new ChargeException(Util.format("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase().replace("_", " "))); throw new ChargeException(Util.format("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase().replace("_", " ")));
} }
if (command != null && !command.isEmpty() if (command != null && !command.isEmpty()
&& !user.isAuthorized("essentials.nocommandcost.all") && !user.isAuthorized("essentials.nocommandcost.all")
&& !user.isAuthorized("essentials.nocommandcost." + command) && !user.isAuthorized("essentials.nocommandcost." + command)
@@ -69,12 +69,12 @@ public class Trade
throw new ChargeException(Util.i18n("notEnoughMoney")); throw new ChargeException(Util.i18n("notEnoughMoney"));
} }
} }
public void pay(final IUser user) public void pay(final IUser user)
{ {
pay(user, true); pay(user, true);
} }
public boolean pay(final IUser user, final boolean dropItems) public boolean pay(final IUser user, final boolean dropItems)
{ {
boolean success = true; boolean success = true;
@@ -100,7 +100,7 @@ public class Trade
} }
return success; return success;
} }
public void charge(final IUser user) throws ChargeException public void charge(final IUser user) throws ChargeException
{ {
if (getMoney() != null) if (getMoney() != null)
@@ -134,18 +134,18 @@ public class Trade
user.takeMoney(cost); user.takeMoney(cost);
} }
} }
public Double getMoney() public Double getMoney()
{ {
return money; return money;
} }
public ItemStack getItemStack() public ItemStack getItemStack()
{ {
return itemStack; return itemStack;
} }
private static FileWriter fw = null; private static FileWriter fw = null;
public static void log(String type, String subtype, String event, String sender, Trade charge, String receiver, Trade pay, Location loc, IEssentials ess) public static void log(String type, String subtype, String event, String sender, Trade charge, String receiver, Trade pay, Location loc, IEssentials ess)
{ {
if (!ess.getSettings().isEcoLogEnabled()) if (!ess.getSettings().isEcoLogEnabled())
@@ -239,7 +239,7 @@ public class Trade
Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex); Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex);
} }
} }
public static void closeLog() public static void closeLog()
{ {
if (fw != null) if (fw != null)

View File

@@ -12,7 +12,6 @@ import org.bukkit.entity.Player;
public class User extends UserData implements Comparable<User>, IReplyTo, IUser public class User extends UserData implements Comparable<User>, IReplyTo, IUser
{ {
private boolean justPortaled = false;
private CommandSender replyTo = null; private CommandSender replyTo = null;
private transient User teleportRequester; private transient User teleportRequester;
private transient boolean teleportRequestHere; private transient boolean teleportRequestHere;
@@ -156,16 +155,6 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
this.base = new OfflinePlayer(getName(), ess); this.base = new OfflinePlayer(getName(), ess);
} }
public boolean getJustPortaled()
{
return justPortaled;
}
public void setJustPortaled(final boolean value)
{
justPortaled = value;
}
@Override @Override
public void setReplyTo(final CommandSender user) public void setReplyTo(final CommandSender user)
{ {
@@ -269,12 +258,21 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
if (ess.getSettings().addPrefixSuffix()) if (ess.getSettings().addPrefixSuffix())
{ {
final String prefix = ess.getPermissionsHandler().getPrefix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName()); if (!ess.getSettings().disablePrefix())
final String suffix = ess.getPermissionsHandler().getSuffix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName()); {
final String prefix = ess.getPermissionsHandler().getPrefix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName());
nickname.insert(0, prefix); nickname.insert(0, prefix);
nickname.append(suffix); }
if (suffix.length() < 2 || !suffix.substring(suffix.length() - 2, suffix.length() - 1).equals("§")) if (!ess.getSettings().disableSuffix())
{
final String suffix = ess.getPermissionsHandler().getSuffix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName());
nickname.append(suffix);
if (suffix.length() < 2 || !suffix.substring(suffix.length() - 2, suffix.length() - 1).equals("§"))
{
nickname.append("§f");
}
}
else
{ {
nickname.append("§f"); nickname.append("§f");
} }
@@ -286,16 +284,16 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
public void setDisplayNick(String name) public void setDisplayNick(String name)
{ {
setDisplayName(name); setDisplayName(name);
//TODO: Maybe we need to limit nick length, or try use a string trim. setPlayerListName(name.length() > 16 ? name.substring(0, 16) : name);
if (name.length() <= 16)
{
setPlayerListName(name);
}
} }
@Override @Override
public String getDisplayName() public String getDisplayName()
{ {
if (!(base instanceof OfflinePlayer) && ess.getSettings().changeDisplayName())
{
setDisplayNick(getNick());
}
return super.getDisplayName() == null ? super.getName() : super.getDisplayName(); return super.getDisplayName() == null ? super.getName() : super.getDisplayName();
} }

View File

@@ -52,6 +52,7 @@ public abstract class UserData extends PlayerExtension implements IConf
jailTimeout = _getJailTimeout(); jailTimeout = _getJailTimeout();
lastLogin = _getLastLogin(); lastLogin = _getLastLogin();
lastLogout = _getLastLogout(); lastLogout = _getLastLogout();
lastLoginAddress = _getLastLoginAddress();
afk = getAfk(); afk = getAfk();
newplayer = getNew(); newplayer = getNew();
geolocation = _getGeoLocation(); geolocation = _getGeoLocation();
@@ -668,6 +669,7 @@ public abstract class UserData extends PlayerExtension implements IConf
config.setProperty("timestamps.login", time); config.setProperty("timestamps.login", time);
config.save(); config.save();
} }
private long lastLogout; private long lastLogout;
private long _getLastLogout() private long _getLastLogout()
@@ -686,6 +688,26 @@ public abstract class UserData extends PlayerExtension implements IConf
config.setProperty("timestamps.logout", time); config.setProperty("timestamps.logout", time);
config.save(); config.save();
} }
private String lastLoginAddress;
private String _getLastLoginAddress()
{
return config.getString("ipAddress", "");
}
public String getLastLoginAddress()
{
return lastLoginAddress;
}
public void setLastLoginAddress(String address)
{
lastLoginAddress = address;
config.setProperty("ipAddress", address);
config.save();
}
private boolean afk; private boolean afk;
private boolean getAfk() private boolean getAfk()

View File

@@ -52,7 +52,7 @@ public class UserMap implements Function<String, User>, IConf
} }
catch (ComputationException ex) catch (ComputationException ex)
{ {
Bukkit.getLogger().log(Level.INFO, "Failed to preload user "+name, ex); Bukkit.getLogger().log(Level.INFO, "Failed to preload user " + name, ex);
} }
} }
} }

View File

@@ -21,28 +21,34 @@ public class Worth implements IConf
{ {
String itemname = itemStack.getType().toString().toLowerCase().replace("_", ""); String itemname = itemStack.getType().toString().toLowerCase().replace("_", "");
double result; double result;
result = config.getDouble("worth."+itemname+"."+itemStack.getDurability(), Double.NaN); result = config.getDouble("worth." + itemname + "." + itemStack.getDurability(), Double.NaN);
if (Double.isNaN(result)) { if (Double.isNaN(result))
result = config.getDouble("worth."+itemname+".0", Double.NaN); {
result = config.getDouble("worth." + itemname + ".0", Double.NaN);
} }
if (Double.isNaN(result)) { if (Double.isNaN(result))
result = config.getDouble("worth."+itemname, Double.NaN); {
result = config.getDouble("worth." + itemname, Double.NaN);
} }
if (Double.isNaN(result)) { if (Double.isNaN(result))
result = config.getDouble("worth-"+itemStack.getTypeId(), Double.NaN); {
result = config.getDouble("worth-" + itemStack.getTypeId(), Double.NaN);
} }
return result; return result;
} }
public void setPrice(ItemStack itemStack, double price) public void setPrice(ItemStack itemStack, double price)
{ {
if (itemStack.getType().getData() == null) { if (itemStack.getType().getData() == null)
{
config.setProperty("worth." + itemStack.getType().toString().toLowerCase().replace("_", ""), price); config.setProperty("worth." + itemStack.getType().toString().toLowerCase().replace("_", ""), price);
} else {
// Bukkit-bug: getDurability still contains the correct value, while getData().getData() is 0.
config.setProperty("worth." + itemStack.getType().toString().toLowerCase().replace("_", "")+"."+itemStack.getDurability(), price);
} }
config.removeProperty("worth-"+itemStack.getTypeId()); else
{
// Bukkit-bug: getDurability still contains the correct value, while getData().getData() is 0.
config.setProperty("worth." + itemStack.getType().toString().toLowerCase().replace("_", "") + "." + itemStack.getDurability(), price);
}
config.removeProperty("worth-" + itemStack.getTypeId());
config.save(); config.save();
} }
@@ -50,5 +56,4 @@ public class Worth implements IConf
{ {
config.load(); config.load();
} }
} }

View File

@@ -23,6 +23,12 @@ public class Commandessentials extends EssentialsCommand
@Override @Override
public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{ {
if (args.length > 0 && args[0].equalsIgnoreCase("debug"))
{
ess.getSettings().setDebug(!ess.getSettings().isDebug());
sender.sendMessage("Essentials " + ess.getDescription().getVersion() + " debug mode " + (ess.getSettings().isDebug() ? "enabled" : "disabled"));
return;
}
final Map<String, Byte> noteMap = new HashMap<String, Byte>(); final Map<String, Byte> noteMap = new HashMap<String, Byte>();
noteMap.put("1F#", (byte)0x0); noteMap.put("1F#", (byte)0x0);
noteMap.put("1G", (byte)0x1); noteMap.put("1G", (byte)0x1);

View File

@@ -0,0 +1,44 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import org.bukkit.GameMode;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class Commandgamemode extends EssentialsCommand
{
public Commandgamemode()
{
super("gamemode");
}
@Override
public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{
Player player;
if (args.length == 0)
{
if (sender instanceof Player)
{
player = ess.getUser(sender); }
else
{
throw new NotEnoughArgumentsException();
}
}
else
{
player = server.getPlayer(args[0]);
if (player == null)
{
throw new Exception(Util.i18n("playerNotFound"));
}
}
player.setGameMode(player.getGameMode() == GameMode.SURVIVAL ? GameMode.CREATIVE : GameMode.SURVIVAL);
//TODO: add this to messages?
sender.sendMessage(Util.format("gameMode", Util.i18n(player.getGameMode().toString().toLowerCase()), player.getDisplayName()));
}
}

View File

@@ -31,7 +31,8 @@ public class Commandinvsee extends EssentialsCommand
{ {
invUser.getInventory().setContents(user.getSavedInventory()); invUser.getInventory().setContents(user.getSavedInventory());
user.setSavedInventory(null); user.setSavedInventory(null);
throw new Exception(Util.i18n("invRestored")); user.sendMessage(Util.i18n("invRestored"));
throw new NoChargeException();
} }
if (user.getSavedInventory() == null) if (user.getSavedInventory() == null)

View File

@@ -24,15 +24,13 @@ public class Commandme extends EssentialsCommand
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
final StringBuilder message = new StringBuilder();
message.append("* "); String message = getFinalArg(args, 0);
message.append(user.getDisplayName()); if (user.isAuthorized("essentials.chat.color"))
message.append(' ');
for (int i = 0; i < args.length; i++)
{ {
message.append(args[i]); message = message.replaceAll("&([0-9a-f])", "§$1");
message.append(' ');
} }
ess.broadcastMessage(user, message.toString());
ess.broadcastMessage(user, Util.format("action", user.getDisplayName(), message));
} }
} }

View File

@@ -15,85 +15,51 @@ public class Commandnick extends EssentialsCommand
} }
@Override @Override
public void run(Server server, User user, String commandLabel, String[] args) throws Exception public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{ {
if (args.length < 1) if (args.length < 1)
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
if (!ess.getSettings().changeDisplayName())
if (!ess.getSettings().changeDisplayName()) { {
throw new Exception(Util.i18n("nickDisplayName")); throw new Exception(Util.i18n("nickDisplayName"));
} }
if (args.length > 1) if (args.length > 1)
{ {
if (!user.isAuthorized("essentials.nick.others")) if (!user.isAuthorized("essentials.nick.others"))
{ {
throw new Exception(Util.i18n("nickOthersPermission")); throw new Exception(Util.i18n("nickOthersPermission"));
} }
setNickname(server, getPlayer(server, args, 0), args[1]);
setOthersNickname(server, user, args); user.sendMessage(Util.i18n("nickChanged"));
return; return;
} }
setNickname(server, user, args[0]);
String nick = args[0];
if ("off".equalsIgnoreCase(nick) || user.getName().equalsIgnoreCase(nick))
{
user.setDisplayNick(user.getName());
user.setNickname(null);
user.sendMessage(Util.i18n("nickNoMore"));
return;
}
if (nick.matches("[^a-zA-Z_0-9]"))
{
throw new Exception(Util.i18n("nickNamesAlpha"));
}
for (Player p : server.getOnlinePlayers())
{
if (user == p)
{
continue;
}
String dn = p.getDisplayName().toLowerCase();
String n = p.getName().toLowerCase();
String nk = nick.toLowerCase();
if (nk.equals(dn) || nk.equals(n))
{
throw new Exception(Util.i18n("nickInUse"));
}
}
user.setDisplayNick(ess.getSettings().getNicknamePrefix() + nick);
user.setNickname(nick);
user.sendMessage(Util.format("nickSet", user.getDisplayName() + "§7."));
} }
@Override @Override
public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
{ {
if (args.length < 2) if (args.length < 2)
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
if (!ess.getSettings().changeDisplayName())
if (!ess.getSettings().changeDisplayName()) { {
sender.sendMessage(Util.i18n("nickDisplayName")); throw new Exception(Util.i18n("nickDisplayName"));
return;
} }
setNickname(server, getPlayer(server, args, 0), args[1]);
setOthersNickname(server, sender, args); sender.sendMessage(Util.i18n("nickChanged"));
} }
private void setOthersNickname(Server server, CommandSender sender, String[] args) throws Exception private void setNickname(final Server server, final User target, final String nick) throws Exception
{ {
User target = getPlayer(server, args, 0); if (nick.matches("[^a-zA-Z_0-9]"))
String nick = args[1]; {
if ("off".equalsIgnoreCase(nick) || target.getName().equalsIgnoreCase(nick)) throw new Exception(Util.i18n("nickNamesAlpha"));
}
else if ("off".equalsIgnoreCase(nick) || target.getName().equalsIgnoreCase(nick))
{ {
target.setDisplayNick(target.getName()); target.setDisplayNick(target.getName());
target.setNickname(null); target.setNickname(null);
@@ -101,10 +67,25 @@ public class Commandnick extends EssentialsCommand
} }
else else
{ {
target.setDisplayNick(ess.getSettings().getNicknamePrefix() + nick); final String formattedNick = nick.replace('&', '\u00a7').replace("\u00a7\u00a7", "&");
target.setNickname(nick); for (Player p : server.getOnlinePlayers())
{
if (target.getBase() == p)
{
continue;
}
String dn = p.getDisplayName().toLowerCase();
String n = p.getName().toLowerCase();
String nk = formattedNick.toLowerCase();
if (nk.equals(dn) || nk.equals(n))
{
throw new Exception(Util.i18n("nickInUse"));
}
}
target.setDisplayNick(ess.getSettings().getNicknamePrefix() + formattedNick);
target.setNickname(formattedNick);
target.sendMessage(Util.format("nickSet", target.getDisplayName() + "§7.")); target.sendMessage(Util.format("nickSet", target.getDisplayName() + "§7."));
} }
sender.sendMessage(Util.i18n("nickChanged"));
} }
} }

View File

@@ -22,13 +22,13 @@ public class Commandpowertool extends EssentialsCommand
String command = getFinalArg(args, 0); String command = getFinalArg(args, 0);
// check to see if this is a clear all command // check to see if this is a clear all command
if(command != null && command.equalsIgnoreCase("clearall")) if(command != null && command.equalsIgnoreCase("c:"))
{ {
user.clearAllPowertools(); user.clearAllPowertools();
user.sendMessage(Util.i18n("powerToolClearAll")); user.sendMessage(Util.i18n("powerToolClearAll"));
return; return;
} }
final ItemStack itemStack = user.getItemInHand(); final ItemStack itemStack = user.getItemInHand();
if (itemStack == null || itemStack.getType() == Material.AIR) if (itemStack == null || itemStack.getType() == Material.AIR)
{ {

View File

@@ -1,21 +0,0 @@
package com.earth2me.essentials.commands;
import com.earth2me.essentials.Util;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
public class Commandreloadall extends EssentialsCommand
{
public Commandreloadall()
{
super("reloadall");
}
@Override
public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
{
server.reload();
sender.sendMessage(Util.i18n("reloadAllPlugins"));
}
}

View File

@@ -29,7 +29,7 @@ public class Commandsell extends EssentialsCommand
{ {
is = user.getItemInHand(); is = user.getItemInHand();
} }
else if (args[0].equalsIgnoreCase("inventory")) else if (args[0].equalsIgnoreCase("inventory") || args[0].equalsIgnoreCase("invent") || args[0].equalsIgnoreCase("all"))
{ {
for (ItemStack stack : user.getInventory().getContents()) for (ItemStack stack : user.getInventory().getContents())
{ {
@@ -103,28 +103,21 @@ public class Commandsell extends EssentialsCommand
int max = 0; int max = 0;
if (!isBulkSell) for (ItemStack s : user.getInventory().getContents())
{ {
for (ItemStack s : user.getInventory().getContents()) if (s == null)
{ {
if (s == null) continue;
{
continue;
}
if (s.getTypeId() != is.getTypeId())
{
continue;
}
if (s.getDurability() != is.getDurability())
{
continue;
}
max += s.getAmount();
} }
} if (s.getTypeId() != is.getTypeId())
else {
{ continue;
max += is.getAmount(); }
if (s.getDurability() != is.getDurability())
{
continue;
}
max += s.getAmount();
} }
if (stack) if (stack)
@@ -140,20 +133,26 @@ public class Commandsell extends EssentialsCommand
{ {
amount -= amount % 64; amount -= amount % 64;
} }
if (amount > max || amount < 1) if (amount > max || amount < 1)
{ {
user.sendMessage(Util.i18n("itemNotEnough1")); if (!isBulkSell)
user.sendMessage(Util.i18n("itemNotEnough2")); {
throw new Exception(Util.i18n("itemNotEnough3")); user.sendMessage(Util.i18n("itemNotEnough1"));
user.sendMessage(Util.i18n("itemNotEnough2"));
throw new Exception(Util.i18n("itemNotEnough3"));
}
else
{
return;
}
} }
final ItemStack ris = new ItemStack(is.getType(), amount, is.getDurability()); final ItemStack ris = new ItemStack(is.getType(), amount, is.getDurability());
InventoryWorkaround.removeItem(user.getInventory(), true, ris); InventoryWorkaround.removeItem(user.getInventory(), true, ris);
user.updateInventory(); user.updateInventory();
Trade.log("Command", "Sell", "Item", user.getName(), new Trade(ris, ess), user.getName(), new Trade(worth*amount, ess), user.getLocation(), ess); Trade.log("Command", "Sell", "Item", user.getName(), new Trade(ris, ess), user.getName(), new Trade(worth * amount, ess), user.getLocation(), ess);
user.giveMoney(worth * amount); user.giveMoney(worth * amount);
user.sendMessage(Util.format("itemSold", Util.formatCurrency(worth * amount, ess), amount, Util.formatCurrency(worth, ess))); user.sendMessage(Util.format("itemSold", Util.formatCurrency(worth * amount, ess), amount, is.getType().toString().toLowerCase(), Util.formatCurrency(worth, ess)));
logger.log(Level.INFO, Util.format("itemSoldConsole", user.getDisplayName(), is.getType().toString().toLowerCase(), Util.formatCurrency(worth * amount, ess), amount, Util.formatCurrency(worth, ess))); logger.log(Level.INFO, Util.format("itemSoldConsole", user.getDisplayName(), is.getType().toString().toLowerCase(), Util.formatCurrency(worth * amount, ess), amount, Util.formatCurrency(worth, ess)));
} }

View File

@@ -18,6 +18,6 @@ public class Commandsuicide extends EssentialsCommand
user.setHealth(0); user.setHealth(0);
user.sendMessage(Util.i18n("suicideMessage")); user.sendMessage(Util.i18n("suicideMessage"));
ess.broadcastMessage(user, ess.broadcastMessage(user,
Util.format("suicideSuccess",user.getDisplayName())); Util.format("suicideSuccess", user.getDisplayName()));
} }
} }

View File

@@ -20,7 +20,7 @@ public class Commandunban extends EssentialsCommand
{ {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }
try try
{ {
final User u = getPlayer(server, args, 0, true); final User u = getPlayer(server, args, 0, true);
@@ -29,7 +29,7 @@ public class Commandunban extends EssentialsCommand
} }
catch (NoSuchFieldException e) catch (NoSuchFieldException e)
{ {
sender.sendMessage(Util.i18n("playerNotFound")); throw new Exception(Util.i18n("playerNotFound"));
} }
} }
} }

View File

@@ -8,6 +8,7 @@ import com.earth2me.essentials.Warps;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import org.bukkit.command.CommandSender;
public class Commandwarp extends EssentialsCommand public class Commandwarp extends EssentialsCommand
@@ -28,33 +29,7 @@ public class Commandwarp extends EssentialsCommand
{ {
throw new Exception(Util.i18n("warpListPermission")); throw new Exception(Util.i18n("warpListPermission"));
} }
warpList(user, args);
Warps warps = ess.getWarps();
if (warps.isEmpty())
{
throw new Exception(Util.i18n("noWarpsDefined"));
}
final List<String> warpNameList = new ArrayList<String>(warps.getWarpNames());
final Iterator<String> iterator = warpNameList.iterator();
while (iterator.hasNext())
{
final String warpName = iterator.next();
if (ess.getSettings().getPerWarpPermission() && !user.isAuthorized("essentials.warp." + warpName))
{
iterator.remove();
}
}
int page = 1;
if (args.length > 0)
{
page = Integer.parseInt(args[0]);
}
if (warpNameList.size() > WARPS_PER_PAGE)
{
user.sendMessage(Util.format("warpsCount", warpNameList.size(), page, (int)Math.ceil(warpNameList.size() / (double)WARPS_PER_PAGE)));
}
final int warpPage = (page - 1) * WARPS_PER_PAGE;
user.sendMessage(Util.joinList(warpNameList.subList(warpPage, warpPage+Math.min(warpNameList.size() - warpPage, WARPS_PER_PAGE))));
throw new NoChargeException(); throw new NoChargeException();
} }
if (args.length > 0) if (args.length > 0)
@@ -75,6 +50,63 @@ public class Commandwarp extends EssentialsCommand
} }
} }
public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
{
if (args.length < 2 || args[0].matches("[0-9]+"))
{
warpList(null, args);
throw new NoChargeException();
}
User otherUser = ess.getUser(server.getPlayer(args[1]));
if (otherUser == null)
{
throw new Exception(Util.i18n("playerNotFound"));
}
warpUser(otherUser, args[0]);
throw new NoChargeException();
}
private void warpList(User user, String[] args) throws Exception
{
Warps warps = ess.getWarps();
if (warps.isEmpty())
{
throw new Exception(Util.i18n("noWarpsDefined"));
}
final List<String> warpNameList = new ArrayList<String>(warps.getWarpNames());
if (user != null)
{
final Iterator<String> iterator = warpNameList.iterator();
while (iterator.hasNext())
{
final String warpName = iterator.next();
if (ess.getSettings().getPerWarpPermission() && !user.isAuthorized("essentials.warp." + warpName))
{
iterator.remove();
}
}
}
int page = 1;
if (args.length > 0)
{
page = Integer.parseInt(args[0]);
}
final int warpPage = (page - 1) * WARPS_PER_PAGE;
final String warpList = Util.joinList(warpNameList.subList(warpPage, warpPage + Math.min(warpNameList.size() - warpPage, WARPS_PER_PAGE)));
if (warpNameList.size() > WARPS_PER_PAGE)
{
user.sendMessage(Util.format("warpsCount", warpNameList.size(), page, (int)Math.ceil(warpNameList.size() / (double)WARPS_PER_PAGE)));
user.sendMessage(warpList);
}
else {
user.sendMessage(Util.format("warps", warpList));
}
}
private void warpUser(User user, String name) throws Exception private void warpUser(User user, String name) throws Exception
{ {
Trade charge = new Trade(this.getName(), ess); Trade charge = new Trade(this.getName(), ess);

View File

@@ -53,17 +53,20 @@ public class Commandwhois extends EssentialsCommand
sender.sendMessage(""); sender.sendMessage("");
sender.sendMessage(Util.format("whoisIs", u.getDisplayName(), u.getName())); sender.sendMessage(Util.format("whoisIs", u.getDisplayName(), u.getName()));
sender.sendMessage(Util.format("whoisHealth", u.getHealth())); sender.sendMessage(Util.format("whoisHealth", u.getHealth()));
sender.sendMessage(Util.format("whoisOP", (u.isOp() ? Util.i18n("true") : Util.i18n("false"))));
sender.sendMessage(Util.format("whoisGod", (u.isGodModeEnabled() ? Util.i18n("true") : Util.i18n("false"))));
sender.sendMessage(Util.format("whoisGamemode", Util.i18n(u.getGameMode().toString().toLowerCase())));
sender.sendMessage(Util.format("whoisLocation", u.getLocation().getWorld().getName(), u.getLocation().getBlockX(), u.getLocation().getBlockY(), u.getLocation().getBlockZ())); sender.sendMessage(Util.format("whoisLocation", u.getLocation().getWorld().getName(), u.getLocation().getBlockX(), u.getLocation().getBlockY(), u.getLocation().getBlockZ()));
if (!ess.getSettings().isEcoDisabled()) if (!ess.getSettings().isEcoDisabled())
{ {
sender.sendMessage(Util.format("whoisMoney", Util.formatCurrency(u.getMoney(), ess))); sender.sendMessage(Util.format("whoisMoney", Util.formatCurrency(u.getMoney(), ess)));
} }
sender.sendMessage(u.isAfk() sender.sendMessage(u.isAfk()
? Util.i18n("whoisStatusAway") ? Util.i18n("whoisStatusAway")
: Util.i18n("whoisStatusAvailable")); : Util.i18n("whoisStatusAvailable"));
sender.sendMessage(Util.format("whoisIPAddress", u.getAddress().getAddress().toString())); sender.sendMessage(Util.format("whoisIPAddress", u.getAddress().getAddress().toString()));
final String location = u.getGeoLocation(); final String location = u.getGeoLocation();
if (location != null if (location != null
&& (sender instanceof Player ? ess.getUser(sender).isAuthorized("essentials.geoip.show") : true)) && (sender instanceof Player ? ess.getUser(sender).isAuthorized("essentials.geoip.show") : true))
{ {
sender.sendMessage(Util.format("whoisGeoLocation", location)); sender.sendMessage(Util.format("whoisGeoLocation", location));

View File

@@ -0,0 +1,69 @@
package com.earth2me.essentials.perm;
import java.util.Arrays;
import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.anjocaido.groupmanager.GroupManager;
import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler;
public class GroupManagerHandler implements IPermissionsHandler
{
private final transient GroupManager groupManager;
public GroupManagerHandler(final Plugin permissionsPlugin)
{
groupManager = ((GroupManager)permissionsPlugin);
}
@Override
public String getGroup(final Player base)
{
final AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
return handler.getGroup(base.getName());
}
@Override
public List<String> getGroups(final Player base)
{
final AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
return Arrays.asList(handler.getGroups(base.getName()));
}
@Override
public boolean canBuild(final Player base, final String group)
{
final AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
return handler.canUserBuild(base.getName());
}
@Override
public boolean inGroup(final Player base, final String group)
{
AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
return handler.inGroup(base.getName(), group);
}
@Override
public boolean hasPermission(final Player base, final String node)
{
AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
return handler.has(base, node);
}
@Override
public String getPrefix(final Player base)
{
AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
return handler.getUserPrefix(base.getName());
}
@Override
public String getSuffix(final Player base)
{
AnjoPermissionsHandler handler = groupManager.getWorldsHolder().getWorldPermissions(base);
return handler.getUserSuffix(base.getName());
}
}

View File

@@ -77,7 +77,7 @@ public class PermissionsExHandler implements IPermissionsHandler
{ {
return null; return null;
} }
return user.getPrefix(); return user.getPrefix(base.getWorld().getName());
} }
@Override @Override
@@ -88,6 +88,7 @@ public class PermissionsExHandler implements IPermissionsHandler
{ {
return null; return null;
} }
return user.getSuffix();
return user.getSuffix(base.getWorld().getName());
} }
} }

View File

@@ -111,17 +111,6 @@ public class PermissionsHandler implements IPermissionsHandler
return; return;
} }
final Plugin permBukkitPlugin = pluginManager.getPlugin("PermissionsBukkit");
if (permBukkitPlugin != null && permBukkitPlugin.isEnabled())
{
if (!(handler instanceof PermissionsBukkitHandler))
{
LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions.");
handler = new PermissionsBukkitHandler(permBukkitPlugin);
}
return;
}
final Plugin bPermPlugin = pluginManager.getPlugin("bPermissions"); final Plugin bPermPlugin = pluginManager.getPlugin("bPermissions");
if (bPermPlugin != null && bPermPlugin.isEnabled()) if (bPermPlugin != null && bPermPlugin.isEnabled())
{ {
@@ -132,6 +121,28 @@ public class PermissionsHandler implements IPermissionsHandler
} }
return; return;
} }
final Plugin GMplugin = pluginManager.getPlugin("GroupManager");
if (GMplugin != null && GMplugin.isEnabled())
{
if (!(handler instanceof GroupManagerHandler))
{
LOGGER.log(Level.INFO, "Essentials: Using GroupManager based permissions.");
handler = new GroupManagerHandler(GMplugin);
}
return;
}
final Plugin permBukkitPlugin = pluginManager.getPlugin("PermissionsBukkit");
if (permBukkitPlugin != null && permBukkitPlugin.isEnabled())
{
if (!(handler instanceof PermissionsBukkitHandler))
{
LOGGER.log(Level.INFO, "Essentials: Using PermissionsBukkit based permissions.");
handler = new PermissionsBukkitHandler(permBukkitPlugin);
}
return;
}
final Plugin permPlugin = pluginManager.getPlugin("Permissions"); final Plugin permPlugin = pluginManager.getPlugin("Permissions");
if (permPlugin != null && permPlugin.isEnabled()) if (permPlugin != null && permPlugin.isEnabled())

View File

@@ -35,10 +35,15 @@ public class SignProtection extends EssentialsSign
protected boolean onSignCreate(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException, ChargeException protected boolean onSignCreate(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException, ChargeException
{ {
sign.setLine(3, "§4" + username); sign.setLine(3, "§4" + username);
if (hasAdjacentBlock(sign.getBlock()) && isBlockProtected(sign.getBlock(), player, username, true) != SignProtectionState.NOT_ALLOWED) if (hasAdjacentBlock(sign.getBlock()))
{ {
sign.setLine(3, "§1" + username); final SignProtectionState state = isBlockProtected(sign.getBlock(), player, username, true);
return true; if (state == SignProtectionState.NOSIGN || state == SignProtectionState.OWNER
|| player.isAuthorized("essentials.signs.protection.override"))
{
sign.setLine(3, "§1" + username);
return true;
}
} }
player.sendMessage(Util.i18n("signProtectInvalidLocation")); player.sendMessage(Util.i18n("signProtectInvalidLocation"));
return false; return false;
@@ -183,11 +188,6 @@ public class SignProtection extends EssentialsSign
SignProtectionState retstate = SignProtectionState.NOSIGN; SignProtectionState retstate = SignProtectionState.NOSIGN;
for (SignProtectionState state : signs.values()) for (SignProtectionState state : signs.values())
{ {
if (state == SignProtectionState.OWNER)
{
return state;
}
if (state == SignProtectionState.ALLOWED) if (state == SignProtectionState.ALLOWED)
{ {
retstate = state; retstate = state;
@@ -197,6 +197,16 @@ public class SignProtection extends EssentialsSign
retstate = state; retstate = state;
} }
} }
if (!secure || retstate == SignProtectionState.NOSIGN)
{
for (SignProtectionState state : signs.values())
{
if (state == SignProtectionState.OWNER)
{
return state;
}
}
}
return retstate; return retstate;
} }
@@ -300,7 +310,7 @@ public class SignProtection extends EssentialsSign
player.sendMessage(Util.format("noDestroyPermission", block.getType().toString().toLowerCase())); player.sendMessage(Util.format("noDestroyPermission", block.getType().toString().toLowerCase()));
return false; return false;
} }
@Override @Override
public boolean onBlockBreak(final Block block, final IEssentials ess) public boolean onBlockBreak(final Block block, final IEssentials ess)
{ {
@@ -324,7 +334,7 @@ public class SignProtection extends EssentialsSign
return state == SignProtectionState.NOSIGN; return state == SignProtectionState.NOSIGN;
} }
@Override @Override
public boolean onBlockIgnite(final Block block, final IEssentials ess) public boolean onBlockIgnite(final Block block, final IEssentials ess)
{ {

View File

@@ -35,7 +35,7 @@ public class SignWarp extends EssentialsSign
throw new SignException(ex.getMessage(), ex); throw new SignException(ex.getMessage(), ex);
} }
final String group = sign.getLine(2); final String group = sign.getLine(2);
if ("Everyone".equalsIgnoreCase(group)) if ("Everyone".equalsIgnoreCase(group) || "Everybody".equalsIgnoreCase(group))
{ {
sign.setLine(2, "§2Everyone"); sign.setLine(2, "§2Everyone");
} }

View File

@@ -144,7 +144,6 @@ player-commands:
- nick - nick
- pay - pay
- ping - ping
- portal
- powertool - powertool
- protect - protect
- r - r

View File

@@ -31,7 +31,6 @@ groups:
- essentials.nick - essentials.nick
- essentials.pay - essentials.pay
- essentials.ping - essentials.ping
- essentials.portal
- essentials.powertool - essentials.powertool
- essentials.protect - essentials.protect
- essentials.sethome - essentials.sethome

View File

@@ -38,8 +38,7 @@ groups:
essentials.msg: true essentials.msg: true
essentials.nick: true essentials.nick: true
essentials.pay: true essentials.pay: true
essentials.ping: true essentials.ping: true
essentials.portal: true
essentials.powertool: true essentials.powertool: true
essentials.protect: true essentials.protect: true
essentials.sethome: true essentials.sethome: true

View File

@@ -37,7 +37,6 @@ groups:
- essentials.nick - essentials.nick
- essentials.pay - essentials.pay
- essentials.ping - essentials.ping
- essentials.portal
- essentials.powertool - essentials.powertool
- essentials.protect - essentials.protect
- essentials.sethome - essentials.sethome

View File

@@ -2,371 +2,377 @@
# Single quotes have to be doubled: '' # Single quotes have to be doubled: ''
# Translations start here # Translations start here
# by: # by:
addedToAccount = \u00a7a{0} has been added to your account. action=* {0} {1}
addedToOthersAccount = \u00a7a{0} has been added to {1} account. addedToAccount=\u00a7a{0} has been added to your account.
alertBroke = broke: addedToOthersAccount=\u00a7a{0} has been added to {1} account.
alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3} alertBroke=broke:
alertPlaced = placed: alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3}
alertUsed = used: alertPlaced=placed:
alertUsed=used:
autoAfkKickReason=You have been kicked for idling more than {0} minutes. autoAfkKickReason=You have been kicked for idling more than {0} minutes.
backAfterDeath = \u00a77Use the /back command to return to your death point. backAfterDeath=\u00a77Use the /back command to return to your death point.
backUsageMsg = \u00a77Returning to previous location. backUsageMsg=\u00a77Returning to previous location.
backupFinished = Backup finished backupFinished=Backup finished
backupStarted = Backup started backupStarted=Backup started
balance = \u00a77Balance: {0} balance=\u00a77Balance: {0}
balanceTop = \u00a77Top {0} balances balanceTop=\u00a77Top {0} balances
banExempt = \u00a7cYou can not ban that player. banExempt=\u00a7cYou can not ban that player.
banIpAddress = \u00a77Banned IP address banIpAddress=\u00a77Banned IP address
bannedIpsFileError = Error reading banned-ips.txt bannedIpsFileError=Error reading banned-ips.txt
bannedIpsFileNotFound = banned-ips.txt not found bannedIpsFileNotFound=banned-ips.txt not found
bannedPlayersFileError = Error reading banned-players.txt bannedPlayersFileError=Error reading banned-players.txt
bannedPlayersFileNotFound = banned-players.txt not found bannedPlayersFileNotFound=banned-players.txt not found
bigTreeFailure = \u00a7cBig tree generation failure. Try again on grass or dirt. bigTreeFailure=\u00a7cBig tree generation failure. Try again on grass or dirt.
bigTreeSuccess = \u00a77Big tree spawned. bigTreeSuccess= \u00a77Big tree spawned.
broadcast = [\u00a7cBroadcast\u00a7f]\u00a7a {0} broadcast=[\u00a7cBroadcast\u00a7f]\u00a7a {0}
buildAlert = \u00a7cYou are not permitted to build buildAlert=\u00a7cYou are not permitted to build
bukkitFormatChanged = Bukkit version format changed. Version not checked. bukkitFormatChanged=Bukkit version format changed. Version not checked.
burnMsg = \u00a77You set {0} on fire for {1} seconds. burnMsg=\u00a77You set {0} on fire for {1} seconds.
canTalkAgain = \u00a77You can talk again canTalkAgain=\u00a77You can talk again
cantFindGeoIpDB = Can''t find GeoIP database! cantFindGeoIpDB=Can''t find GeoIP database!
cantReadGeoIpDB = Failed to read GeoIP database! cantReadGeoIpDB=Failed to read GeoIP database!
cantSpawnItem = \u00a7cYou are not allowed to spawn the item {0} cantSpawnItem=\u00a7cYou are not allowed to spawn the item {0}
commandFailed = Command {0} failed: commandFailed=Command {0} failed:
commandHelpFailedForPlugin = Error getting help for: {0} commandHelpFailedForPlugin=Error getting help for: {0}
commandNotLoaded = \u00a7cCommand {0} is improperly loaded. commandNotLoaded=\u00a7cCommand {0} is improperly loaded.
compassBearing = \u00a77Bearing: {0} ({1} degrees). compassBearing=\u00a77Bearing: {0} ({1} degrees).
configFileMoveError = Failed to move config.yml to backup location. configFileMoveError=Failed to move config.yml to backup location.
configFileRenameError = Failed to rename temp file to config.yml configFileRenameError=Failed to rename temp file to config.yml
connectedPlayers = Connected players: connectedPlayers=Connected players:
connectionFailed = Failed to open connection. connectionFailed=Failed to open connection.
cooldownWithMessage = \u00a7cCooldown: {0} cooldownWithMessage=\u00a7cCooldown: {0}
corruptNodeInConfig = \u00a74Notice: Your configuration file has a corrupt {0} node. corruptNodeInConfig=\u00a74Notice: Your configuration file has a corrupt {0} node.
couldNotFindTemplate = Could not find template {0} couldNotFindTemplate=Could not find template {0}
creatingConfigFromTemplate = Creating config from template: {0} creatingConfigFromTemplate=Creating config from template: {0}
creatingEmptyConfig = Creating empty config: {0} creatingEmptyConfig=Creating empty config: {0}
creatingPortal = Creating portal at {0},{1},{2}. creative=creative
day = day day=day
days = days days=days
defaultBanReason = The Ban Hammer has spoken! defaultBanReason=The Ban Hammer has spoken!
deleteFileError = Could not delete file: {0} deleteFileError=Could not delete file: {0}
deleteHome = \u00a77Home {0} has been removed. deleteHome=\u00a77Home {0} has been removed.
deleteJail = \u00a77Jail {0} has been removed. deleteJail=\u00a77Jail {0} has been removed.
deleteWarp = \u00a77Warp {0} has been removed. deleteWarp=\u00a77Warp {0} has been removed.
deniedAccessCommand = {0} was denied access to command. deniedAccessCommand={0} was denied access to command.
dependancyDownloaded = [Essentials] Dependancy {0} downloaded successfully. dependancyDownloaded=[Essentials] Dependancy {0} downloaded successfully.
dependancyException = [Essentials] An error occurred when trying to download a dependacy dependancyException=[Essentials] An error occurred when trying to download a dependacy
dependancyNotFound = [Essentials] A required dependancy was not found, downloading now. dependancyNotFound=[Essentials] A required dependancy was not found, downloading now.
depth = \u00a77You are at sea level. depth=\u00a77You are at sea level.
depthAboveSea = \u00a77You are {0} block(s) above sea level. depthAboveSea=\u00a77You are {0} block(s) above sea level.
depthBelowSea = \u00a77You are {0} block(s) below sea level. depthBelowSea=\u00a77You are {0} block(s) below sea level.
destinationNotSet = Destination not set destinationNotSet=Destination not set
disableUnlimited = \u00a77Disabled unlimited placing of {0} for {1}. disableUnlimited=\u00a77Disabled unlimited placing of {0} for {1}.
disabled = disabled disabled=disabled
dontMoveMessage = \u00a77Teleportation will commence in {0}. Don''t move. dontMoveMessage=\u00a77Teleportation will commence in {0}. Don''t move.
downloadingGeoIp = Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB) downloadingGeoIp=Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB)
duplicatedUserdata = Duplicated userdata: {0} and {1} duplicatedUserdata=Duplicated userdata: {0} and {1}
enableUnlimited = \u00a77Giving unlimited amount of {0} to {1}. enableUnlimited=\u00a77Giving unlimited amount of {0} to {1}.
enabled = enabled enabled=enabled
errorCallingCommand = Error calling command /{0} errorCallingCommand=Error calling command /{0}
errorWithMessage = \u00a7cError: {0} errorWithMessage=\u00a7cError: {0}
essentialsReload = \u00a77Essentials Reloaded {0} essentialsReload=\u00a77Essentials Reloaded {0}
extinguish = \u00a77You extinguished yourself. extinguish=\u00a77You extinguished yourself.
extinguishOthers = \u00a77You extinguished {0}. extinguishOthers=\u00a77You extinguished {0}.
failedToCloseConfig = Failed to close config {0} failedToCloseConfig=Failed to close config {0}
failedToCreateConfig = Failed to create config {0} failedToCreateConfig=Failed to create config {0}
failedToWriteConfig = Failed to write config {0} failedToWriteConfig=Failed to write config {0}
fileRenameError = Renaming file {0} failed false=false
foreverAlone = \u00a7cYou have nobody to whom you can reply. fileRenameError=Renaming file {0} failed
freedMemory = Freed {0} MB. foreverAlone=\u00a7cYou have nobody to whom you can reply.
gcchunks = chunks, freedMemory=Freed {0} MB.
gcentities = entities gameMode=\u00a77Set game mode {0} for {1}.
gcfree = Free memory: {0} MB gcchunks= chunks,
gcmax = Maximum memory: {0} MB gcentities= entities
gctotal = Allocated memory: {0} MB gcfree=Free memory: {0} MB
generatingPortal = \u00a77Generating an exit portal. gcmax=Maximum memory: {0} MB
geoIpUrlEmpty = GeoIP download url is empty. gctotal=Allocated memory: {0} MB
geoIpUrlInvalid = GeoIP download url is invalid. geoIpUrlEmpty=GeoIP download url is empty.
geoipJoinFormat = Player {0} comes from {1} geoIpUrlInvalid=GeoIP download url is invalid.
godDisabledFor = disabled for {0} geoipJoinFormat=Player {0} comes from {1}
godEnabledFor = enabled for {0} godDisabledFor=disabled for {0}
godMode = \u00a77God mode {0}. godEnabledFor=enabled for {0}
haveBeenReleased = \u00a77You have been released godMode=\u00a77God mode {0}.
heal = \u00a77You have been healed. haveBeenReleased=\u00a77You have been released
healOther = \u00a77Healed {0}. heal=\u00a77You have been healed.
helpConsole = To view help from the console, type ?. healOther=\u00a77Healed {0}.
helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpConsole=To view help from the console, type ?.
helpPages = Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f: helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
holeInFloor = Hole in floor helpPages=Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f:
homeSet = \u00a77Home set. holeInFloor=Hole in floor
homeSetToBed = \u00a77Your home is now set to this bed. homeSet=\u00a77Home set.
homes = Homes: {0} homeSetToBed=\u00a77Your home is now set to this bed.
hour = hour homes=Homes: {0}
hours = hours hour=hour
ignorePlayer = You ignore player {0} from now on. hours=hours
illegalDate = Illegal date format. ignorePlayer=You ignore player {0} from now on.
infoChapter = Select chapter: illegalDate=Illegal date format.
infoChapterPages = Chapter {0}, page \u00a7c{1}\u00a7f of \u00a7c{2}\u00a7f: infoChapter=Select chapter:
infoFileDoesNotExist = File info.txt does not exist. Creating one for you. infoChapterPages=Chapter {0}, page \u00a7c{1}\u00a7f of \u00a7c{2}\u00a7f:
infoPages = Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f: infoFileDoesNotExist=File info.txt does not exist. Creating one for you.
infoUnknownChapter = Unknown chapter. infoPages=Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f:
invBigger = The other users inventory is bigger than yours. infoUnknownChapter=Unknown chapter.
invRestored = Your inventory has been restored. invBigger=The other users inventory is bigger than yours.
invSee = You see the inventory of {0}. invRestored=Your inventory has been restored.
invSeeHelp = Use /invsee to restore your inventory. invSee=You see the inventory of {0}.
invalidCharge = \u00a7cInvalid charge. invSeeHelp=Use /invsee to restore your inventory.
invalidMob = Invalid mob type. invalidCharge=\u00a7cInvalid charge.
invalidServer = Invalid server! invalidMob=Invalid mob type.
invalidSignLine = Line {0} on sign is invalid. invalidServer=Invalid server!
invalidWorld = \u00a7cInvalid world. invalidSignLine=Line {0} on sign is invalid.
inventoryCleared = \u00a77Inventory Cleared. invalidWorld=\u00a7cInvalid world.
inventoryClearedOthers = \u00a77Inventory of \u00a7c{0}\u00a77 cleared. inventoryCleared=\u00a77Inventory Cleared.
is = is inventoryClearedOthers=\u00a77Inventory of \u00a7c{0}\u00a77 cleared.
itemCannotBeSold = That item cannot be sold to the server. is=is
itemMustBeStacked = Item must be traded in stacks. A quantity of 2s would be two stacks, etc. itemCannotBeSold=That item cannot be sold to the server.
itemNotEnough1 = \u00a7cYou do not have enough of that item to sell. itemMustBeStacked=Item must be traded in stacks. A quantity of 2s would be two stacks, etc.
itemNotEnough2 = \u00a77If you meant to sell all of your items of that type, use /sell itemname itemNotEnough1=\u00a7cYou do not have enough of that item to sell.
itemNotEnough3 = \u00a77/sell itemname -1 will sell all but one item, etc. itemNotEnough2=\u00a77If you meant to sell all of your items of that type, use /sell itemname
itemSellAir = You really tried to sell Air? Put an item in your hand. itemNotEnough3=\u00a77/sell itemname -1 will sell all but one item, etc.
itemSold = \u00a77Sold for \u00a7c {0} \u00a77 ({1} items at {2} each) itemSellAir=You really tried to sell Air? Put an item in your hand.
itemSoldConsole = {0} sold {1} for \u00a77 {2} \u00a77 ({3} items at {4} each) itemSold=\u00a77Sold for \u00a7c{0} \u00a77({1} {2} at {3} each)
itemSpawn = \u00a77Giving {0} of {1} itemSoldConsole={0} sold {1} for \u00a77{2} \u00a77({3} items at {4} each)
itemsCsvNotLoaded = Could not load items.csv. itemSpawn=\u00a77Giving {0} of {1}
jailAlreadyIncarcerated = \u00a7cPerson is already in jail: {0} itemsCsvNotLoaded=Could not load items.csv.
jailMessage = \u00a7cYou do the crime, you do the time. jailAlreadyIncarcerated=\u00a7cPerson is already in jail: {0}
jailNotExist = That jail does not exist. jailMessage=\u00a7cYou do the crime, you do the time.
jailReleased = \u00a77Player \u00a7e{0}\u00a77 unjailed. jailNotExist=That jail does not exist.
jailReleasedPlayerNotify = \u00a77You have been released! jailReleased=\u00a77Player \u00a7e{0}\u00a77 unjailed.
jailSentenceExtended = Jail time extend to: {0) jailReleasedPlayerNotify=\u00a77You have been released!
jailSet = \u00a77Jail {0} has been set jailSentenceExtended=Jail time extend to: {0)
jumpError = That would hurt your computer''s brain. jailSet=\u00a77Jail {0} has been set
kickDefault = Kicked from server jumpError=That would hurt your computer''s brain.
kickExempt = \u00a7cYou can not kick that person. kickDefault=Kicked from server
kill = \u00a77Killed {0}. kickExempt=\u00a7cYou can not kick that person.
kitError = \u00a7cThere are no valid kits. kill=\u00a77Killed {0}.
kitError2 = \u00a7cThat kit does not exist or is improperly defined. kitError=\u00a7cThere are no valid kits.
kitErrorHelp = \u00a7cPerhaps an item is missing a quantity in the configuration? kitError2=\u00a7cThat kit does not exist or is improperly defined.
kitGive = \u00a77Giving kit {0}. kitErrorHelp=\u00a7cPerhaps an item is missing a quantity in the configuration?
kitInvFull = \u00a7cYour inventory was full, placing kit on the floor kitGive=\u00a77Giving kit {0}.
kitTimed = \u00a7cYou can''t use that kit again for another {0}. kitInvFull=\u00a7cYour inventory was full, placing kit on the floor
kits = \u00a77Kits: {0} kitTimed=\u00a7cYou can''t use that kit again for another {0}.
lightningSmited = \u00a77You have just been smited kits=\u00a77Kits: {0}
lightningUse = \u00a77Smiting {0} lightningSmited=\u00a77You have just been smited
loadWarpError = Failed to load warp {0} lightningUse=\u00a77Smiting {0}
loadinfo = Loaded {0} build {1} by: {2} loadWarpError=Failed to load warp {0}
localFormat = Local: <{0}> {1} loadinfo=Loaded {0} build {1} by: {2}
mailClear = \u00a7cTo mark your mail as read, type /mail clear localFormat=Local: <{0}> {1}
mailCleared = \u00a77Mail Cleared! mailClear=\u00a7cTo mark your mail as read, type /mail clear
mailSent = \u00a77Mail sent! mailCleared=\u00a77Mail Cleared!
markMailAsRead = \u00a7cTo mark your mail as read, type /mail clear mailSent=\u00a77Mail sent!
markedAsAway = \u00a77You are now marked as away. markMailAsRead=\u00a7cTo mark your mail as read, type /mail clear
markedAsNotAway = \u00a77You are no longer marked as away. markedAsAway=\u00a77You are now marked as away.
markedAsNotAway=\u00a77You are no longer marked as away.
maxHomes=You cannot set more than {0} homes. maxHomes=You cannot set more than {0} homes.
mayNotJail = \u00a7cYou may not jail that person mayNotJail=\u00a7cYou may not jail that person
me = me me=me
minute = minute minute=minute
minutes = minutes minutes=minutes
missingItems = You do not have {0}x {1}. missingItems=You do not have {0}x {1}.
missingPrefixSuffix = Missing a prefix or suffix for {0} missingPrefixSuffix=Missing a prefix or suffix for {0}
mobsAvailable = \u00a77Mobs: {0} mobSpawnError=Error while changing mob spawner.
mobSpawnError = Error while changing mob spawner. mobSpawnLimit=Mob quantity limited to server limit
mobSpawnLimit = Mob quantity limited to server limit mobSpawnTarget=Target block must be a mob spawner.
mobSpawnTarget = Target block must be a mob spawner. mobsAvailable=\u00a77Mobs: {0}
moneyRecievedFrom = \u00a7a{0} has been received from {1} moneyRecievedFrom=\u00a7a{0} has been received from {1}
moneySentTo = \u00a7a{0} has been sent to {1} moneySentTo=\u00a7a{0} has been sent to {1}
moneyTaken = {0} taken from your bank account. moneyTaken={0} taken from your bank account.
month = month month=month
months = months months=months
moreThanZero = Quantities must be greater than 0. moreThanZero=Quantities must be greater than 0.
msgFormat = \u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2} msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
muteExempt = \u00a7cYou may not mute that player. muteExempt=\u00a7cYou may not mute that player.
mutedPlayer = Player {0} muted. mutedPlayer=Player {0} muted.
mutedPlayerFor = Player {0} muted for {1}. mutedPlayerFor=Player {0} muted for {1}.
mutedUserSpeaks = {0} tried to speak, but is muted. mutedUserSpeaks={0} tried to speak, but is muted.
needTpohere = You need access to /tpohere to teleport other players. needTpohere=You need access to /tpohere to teleport other players.
negativeBalanceError = User is not allowed to have a negative balance. negativeBalanceError=User is not allowed to have a negative balance.
nickChanged = Nickname changed. nickChanged=Nickname changed.
nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickDisplayName=\u00a77You have to enable change-displayname in Essentials config.
nickInUse = \u00a7cThat name is already in use. nickInUse=\u00a7cThat name is already in use.
nickNamesAlpha = \u00a7cNicknames must be alphanumeric. nickNamesAlpha=\u00a7cNicknames must be alphanumeric.
nickNoMore = \u00a77You no longer have a nickname. nickNoMore=\u00a77You no longer have a nickname.
nickOthersPermission = \u00a7cYou do not have permission to change the nickname of others nickOthersPermission=\u00a7cYou do not have permission to change the nickname of others
nickSet = \u00a77Your nickname is now \u00a7c{0} nickSet=\u00a77Your nickname is now \u00a7c{0}
noAccessCommand = \u00a7cYou do not have access to that command. noAccessCommand=\u00a7cYou do not have access to that command.
noAccessPermission = \u00a7cYou do not have permission to access that {0}. noAccessPermission=\u00a7cYou do not have permission to access that {0}.
noDestroyPermission = \u00a7cYou do not have permission to destroy that {0}. noDestroyPermission=\u00a7cYou do not have permission to destroy that {0}.
noHelpFound = \u00a7cNo matching commands. noHelpFound=\u00a7cNo matching commands.
noHomeSet = You have not set a home. noHomeSet=You have not set a home.
noHomeSetPlayer = Player has not set a home. noHomeSetPlayer=Player has not set a home.
noKitPermission = \u00a7cYou need the \u00a7c{0}\u00a7c permission to use that kit. noKitPermission=\u00a7cYou need the \u00a7c{0}\u00a7c permission to use that kit.
noKits = \u00a77There are no kits available yet noKits=\u00a77There are no kits available yet
noMail = You do not have any mail noMail=You do not have any mail
noMailSendPerm = \u00a7cYou do not have the \u00a7fessentials.mail.send\u00a7c permission. noMailSendPerm=\u00a7cYou do not have the \u00a7fessentials.mail.send\u00a7c permission.
noMotd = \u00a7cThere is no message of the day. noMotd=\u00a7cThere is no message of the day.
noNewMail = \u00a77You have no new mail. noNewMail=\u00a77You have no new mail.
noPendingRequest = You do not have a pending request. noPendingRequest=You do not have a pending request.
noPowerTools = You have no power tools assigned. noPlacePermission=\u00a7cYou do not have permission to place a block near that sign.
noPlacePermission = \u00a7cYou do not have permission to place a block near that sign. noPowerTools=You have no power tools assigned.
noRules = \u00a7cThere are no rules specified yet. noRules=\u00a7cThere are no rules specified yet.
noWarpsDefined = No warps defined noWarpsDefined=No warps defined
none = none none=none
notAllowedToQuestion = \u00a7cYou are not authorized to use question. notAllowedToQuestion=\u00a7cYou are not authorized to use question.
notAllowedToShout = \u00a7cYou are not authorized to shout. notAllowedToShout=\u00a7cYou are not authorized to shout.
notEnoughMoney = You do not have sufficient funds. notEnoughMoney=You do not have sufficient funds.
notRecommendedBukkit = Bukkit version is not the recommended build for Essentials. notRecommendedBukkit=Bukkit version is not the recommended build for Essentials.
notSupportedYet = Not supported yet. notSupportedYet=Not supported yet.
now = now now=now
numberRequired = A number goes there, silly. numberRequired=A number goes there, silly.
onlyDayNight = /time only supports day/night. onlyDayNight=/time only supports day/night.
onlyPlayers = Only in-game players can use {0}. onlyPlayers=Only in-game players can use {0}.
onlySunStorm = /weather only supports sun/storm. onlySunStorm=/weather only supports sun/storm.
pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
pTimePlayers = These players have their own time: pTimePlayers=These players have their own time:
pTimeReset = Player time has been reset for: \u00a7e{0} pTimeReset=Player time has been reset for: \u00a7e{0}
pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
parseError = Error parsing {0} on line {1} parseError=Error parsing {0} on line {1}
pendingTeleportCancelled = \u00a7cPending teleportation request cancelled. pendingTeleportCancelled=\u00a7cPending teleportation request cancelled.
permissionsError = Missing Permissions/GroupManager; chat prefixes/suffixes will be disabled. permissionsError=Missing Permissions/GroupManager; chat prefixes/suffixes will be disabled.
playerBanned = \u00a7cPlayer {0} banned {1} for {2} playerBanned=\u00a7cPlayer {0} banned {1} for {2}
playerInJail = \u00a7cPlayer is already in jail {0}. playerInJail=\u00a7cPlayer is already in jail {0}.
playerJailed = \u00a77Player {0} jailed. playerJailed=\u00a77Player {0} jailed.
playerJailedFor = \u00a77Player {0} jailed for {1}. playerJailedFor= \u00a77Player {0} jailed for {1}.
playerKicked = \u00a7cPlayer {0} kicked {1} for {2} playerKicked=\u00a7cPlayer {0} kicked {1} for {2}
playerMuted = \u00a77You have been muted playerMuted=\u00a77You have been muted
playerMutedFor = \u00a77You have been muted for {0} playerMutedFor=\u00a77You have been muted for {0}
playerNeverOnServer = \u00a7cPlayer {0} was never on this server. playerNeverOnServer=\u00a7cPlayer {0} was never on this server.
playerNotFound = \u00a7cPlayer not found. playerNotFound=\u00a7cPlayer not found.
playerUnmuted = \u00a77You have been unmuted playerUnmuted=\u00a77You have been unmuted
pong = Pong! pong=Pong!
possibleWorlds = \u00a77Possible worlds are the numbers 0 through {0}. possibleWorlds=\u00a77Possible worlds are the numbers 0 through {0}.
powerToolAir = Command can''t be attached to air. powerToolAir=Command can''t be attached to air.
powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. powerToolAlreadySet=Command \u00a7c{0}\u00a7f is already assigned to {1}.
powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. powerToolAttach=\u00a7c{0}\u00a7f command assigned to {1}.
powerToolClearAll = All powertool commands have been cleared. powerToolClearAll=All powertool commands have been cleared.
powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. powerToolList={1} has the following commands: \u00a7c{0}\u00a7f.
powerToolListEmpty = {0} has no commands assigned. powerToolListEmpty={0} has no commands assigned.
powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. powerToolNoSuchCommandAssigned=Command \u00a7c{0}\u00a7f has not been assigned to {1}.
powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemove=Command \u00a7c{0}\u00a7f removed from {1}.
powerToolRemoveAll = All commands removed from {0}. powerToolRemoveAll=All commands removed from {0}.
powerToolsEnabled = All of your power tools have been enabled. powerToolsDisabled=All of your power tools have been disabled.
powerToolsDisabled = All of your power tools have been disabled. powerToolsEnabled=All of your power tools have been enabled.
protectionOwner = \u00a76[EssentialsProtect] Protection owner: {0} protectionOwner=\u00a76[EssentialsProtect] Protection owner: {0}
questionFormat = \u00a77[Question]\u00a7f {0} questionFormat=\u00a77[Question]\u00a7f {0}
reloadAllPlugins = \u00a77Reloaded all plugins. reloadAllPlugins=\u00a77Reloaded all plugins.
repair = You have successfully repaired your: \u00a7e{0}. repair=You have successfully repaired your: \u00a7e{0}.
repairAlreadyFixed = \u00a77This item does not need repairing. repairAlreadyFixed=\u00a77This item does not need repairing.
repairInvalidType = \u00a7cThis item cannot be repaired. repairInvalidType=\u00a7cThis item cannot be repaired.
repairNone = There were no items that needing repairing. repairNone=There were no items that needing repairing.
requestAccepted = \u00a77Teleport request accepted. requestAccepted=\u00a77Teleport request accepted.
requestAcceptedFrom = \u00a77{0} accepted your teleport request. requestAcceptedFrom=\u00a77{0} accepted your teleport request.
requestDenied = \u00a77Teleport request denied. requestDenied=\u00a77Teleport request denied.
requestDeniedFrom = \u00a77{0} denied your teleport request. requestDeniedFrom=\u00a77{0} denied your teleport request.
requestSent = \u00a77Request sent to {0}\u00a77. requestSent=\u00a77Request sent to {0}\u00a77.
returnPlayerToJailError = Error occurred when trying to return player to jail. returnPlayerToJailError=Error occurred when trying to return player to jail.
second = second second=second
seconds = seconds seconds=seconds
seenOffline = Player {0} is offline since {1} seenOffline=Player {0} is offline since {1}
seenOnline = Player {0} is online since {1} seenOnline=Player {0} is online since {1}
serverFull = Server is full serverFull=Server is full
setSpawner = Changed spawner type to {0} setSpawner=Changed spawner type to {0}
sheepMalformedColor = Malformed color. sheepMalformedColor=Malformed color.
shoutFormat = \u00a77[Shout]\u00a7f {0} shoutFormat=\u00a77[Shout]\u00a7f {0}
signFormatFail = \u00a74[{0}] signFormatFail=\u00a74[{0}]
signFormatSuccess = \u00a71[{0}] signFormatSuccess=\u00a71[{0}]
signFormatTemplate = [{0}] signFormatTemplate=[{0}]
signProtectInvalidLocation = \u00a74You are not allowed to create sign here. signProtectInvalidLocation=\u00a74You are not allowed to create sign here.
similarWarpExist = A warp with a similar name already exists. similarWarpExist=A warp with a similar name already exists.
slimeMalformedSize = Malformed size. slimeMalformedSize=Malformed size.
soloMob = That mob likes to be alone soloMob=That mob likes to be alone
spawnSet = \u00a77Spawn location set for group {0}. spawnSet=\u00a77Spawn location set for group {0}.
spawned = spawned spawned=spawned
suicideMessage = \u00a77Goodbye Cruel World... suicideMessage=\u00a77Goodbye Cruel World...
suicideSuccess = \u00a77{0} took their own life suicideSuccess= \u00a77{0} took their own life
takenFromAccount = \u00a7c{0} has been taken from your account. survival=survival
takenFromOthersAccount = \u00a7c{0} has been taken from {1} account. takenFromAccount=\u00a7c{0} has been taken from your account.
teleportAAll = \u00a77Teleporting request sent to all players... takenFromOthersAccount=\u00a7c{0} has been taken from {1} account.
teleportAll = \u00a77Teleporting all players... teleportAAll=\u00a77Teleporting request sent to all players...
teleportAtoB = \u00a77{0}\u00a77 teleported you to {1}\u00a77. teleportAll=\u00a77Teleporting all players...
teleportDisabled = {0} has teleportation disabled. teleportAtoB=\u00a77{0}\u00a77 teleported you to {1}\u00a77.
teleportHereRequest = \u00a7c{0}\u00a7c has requested that you teleport to them. teleportDisabled={0} has teleportation disabled.
teleportNewPlayerError = Failed to teleport new player teleportHereRequest=\u00a7c{0}\u00a7c has requested that you teleport to them.
teleportRequest = \u00a7c{0}\u00a7c has requested to teleport to you. teleportNewPlayerError=Failed to teleport new player
teleportTop = \u00a77Teleporting to top. teleportRequest=\u00a7c{0}\u00a7c has requested to teleport to you.
teleportationCommencing = \u00a77Teleportation commencing... teleportTop=\u00a77Teleporting to top.
teleportationDisabled = \u00a77Teleportation disabled. teleportationCommencing=\u00a77Teleportation commencing...
teleportationEnabled = \u00a77Teleportation enabled. teleportationDisabled=\u00a77Teleportation disabled.
teleporting = \u00a77Teleporting... teleportationEnabled=\u00a77Teleportation enabled.
teleportingPortal = \u00a77Teleporting via portal. teleporting=\u00a77Teleporting...
tempBanned = Temporarily banned from server for {0} teleportingPortal=\u00a77Teleporting via portal.
tempbanExempt = \u00a77You may not tempban that player tempBanned=Temporarily banned from server for {0}
thunder = You {0} thunder in your world tempbanExempt=\u00a77You may not tempban that player
thunderDuration = You {0} thunder in your world for {1} seconds. thunder= You {0} thunder in your world
timeBeforeHeal = Time before next heal: {0} thunderDuration=You {0} thunder in your world for {1} seconds.
timeBeforeTeleport = Time before next teleport: {0} timeBeforeHeal=Time before next heal: {0}
timeFormat = \u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f timeBeforeTeleport=Time before next teleport: {0}
timePattern = (?:([0-9]+)\\s*y[a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)? timeFormat=\u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f
timeSet = Time set in all worlds. timePattern=(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)?
timeSetPermission = \u00a7cYou are not authorized to set the time. timeSet=Time set in all worlds.
timeWorldCurrent = The current time in {0} is \u00a73{1} timeSetPermission=\u00a7cYou are not authorized to set the time.
timeWorldSet = The time was set to {0} in: \u00a7c{1} timeWorldCurrent=The current time in {0} is \u00a73{1}
tradeCompleted = \u00a77Trade completed. timeWorldSet=The time was set to {0} in: \u00a7c{1}
tradeSignEmpty = The trade sign has nothing available for you. tradeCompleted=\u00a77Trade completed.
tradeSignEmptyOwner = There is nothing to collect from this trade sign. tradeSignEmpty=The trade sign has nothing available for you.
treeFailure = \u00a7cTree generation failure. Try again on grass or dirt. tradeSignEmptyOwner=There is nothing to collect from this trade sign.
treeSpawned = \u00a77Tree spawned. treeFailure=\u00a7cTree generation failure. Try again on grass or dirt.
typeTpaccept = \u00a77To teleport, type \u00a7c/tpaccept\u00a77. treeSpawned=\u00a77Tree spawned.
typeTpdeny = \u00a77To deny this request, type \u00a7c/tpdeny\u00a77. true=true
typeWorldName = \u00a77You can also type the name of a specific world. typeTpaccept=\u00a77To teleport, type \u00a7c/tpaccept\u00a77.
unableToSpawnMob = Unable to spawn mob. typeTpdeny=\u00a77To deny this request, type \u00a7c/tpdeny\u00a77.
unbannedIP = Unbanned IP address. typeWorldName=\u00a77You can also type the name of a specific world.
unbannedPlayer = Unbanned player. unableToSpawnMob=Unable to spawn mob.
unignorePlayer = You are not ignoring player {0} anymore. unbannedIP=Unbanned IP address.
unknownItemId = Unknown item id: {0} unbannedPlayer=Unbanned player.
unknownItemInList = Unknown item {0} in {1} list. unignorePlayer=You are not ignoring player {0} anymore.
unknownItemName = Unknown item name: {0} unknownItemId=Unknown item id: {0}
unlimitedItemPermission = \u00a7cNo permission for unlimited item {0}. unknownItemInList=Unknown item {0} in {1} list.
unlimitedItems = Unlimited items: unknownItemName=Unknown item name: {0}
unmutedPlayer = Player {0} unmuted. unlimitedItemPermission=\u00a7cNo permission for unlimited item {0}.
upgradingFilesError = Error while upgrading the files unlimitedItems=Unlimited items:
userCreatedPortal = {0} used a portal and generated an exit portal. unmutedPlayer=Player {0} unmuted.
userDoesNotExist = The user {0} does not exist. upgradingFilesError=Error while upgrading the files
userIsAway = {0} is now AFK userDoesNotExist=The user {0} does not exist.
userIsNotAway = {0} is no longer AFK userIsAway={0} is now AFK
userJailed = \u00a77You have been jailed userIsNotAway={0} is no longer AFK
userUsedPortal = {0} used an existing exit portal. userJailed=\u00a77You have been jailed
userdataMoveBackError = Failed to move userdata/{0}.tmp to userdata/{1} userUsedPortal={0} used an existing exit portal.
userdataMoveError = Failed to move userdata/{0} to userdata/{1}.tmp userdataMoveBackError=Failed to move userdata/{0}.tmp to userdata/{1}
usingPortal = \u00a77Teleporting via portal to an existing portal. userdataMoveError=Failed to move userdata/{0} to userdata/{1}.tmp
usingTempFolderForTesting = Using temp folder for testing: usingTempFolderForTesting=Using temp folder for testing:
versionMismatch = Version mismatch! Please update {0} to the same version. versionMismatch=Version mismatch! Please update {0} to the same version.
versionMismatchAll = Version mismatch! Please update all Essentials jars to the same version. versionMismatchAll=Version mismatch! Please update all Essentials jars to the same version.
voiceSilenced = \u00a77Your voice has been silenced voiceSilenced=\u00a77Your voice has been silenced
warpDeleteError = Problem deleting the warp file. warpDeleteError=Problem deleting the warp file.
warpListPermission = \u00a7cYou do not have Permission to list that warps. warpListPermission=\u00a7cYou do not have Permission to list that warps.
warpNotExist = That warp does not exist. warpNotExist=That warp does not exist.
warpSet = \u00a77Warp {0} set. warpSet=\u00a77Warp {0} set.
warpUsePermission = \u00a7cYou do not have Permission to use that warp. warpUsePermission=\u00a7cYou do not have Permission to use that warp.
warpingTo = \u00a77Warping to {0}. warpingTo=\u00a77Warping to {0}.
warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warps=Warps: {0}
weatherStorm = \u00a77You set the weather to storm in {0} warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
weatherStormFor = \u00a77You set the weather to storm in {0} for {1} seconds weatherStorm=\u00a77You set the weather to storm in {0}
weatherSun = \u00a77You set the weather to sun in {0} weatherStormFor=\u00a77You set the weather to storm in {0} for {1} seconds
weatherSunFor = \u00a77You set the weather to sun in {0} for {1} seconds weatherSun=\u00a77You set the weather to sun in {0}
whoisGeoLocation = \u00a79 - Location: {0} weatherSunFor=\u00a77You set the weather to sun in {0} for {1} seconds
whoisHealth = \u00a79 - Health: {0}/20 whoisGamemode=\u00a79 - Gamemode: {0}
whoisIPAddress = \u00a79 - IP Address: {0} whoisGeoLocation=\u00a79 - Location: {0}
whoisIs = {0} is {1} whoisGod=\u00a79 - God mode: {0}
whoisLocation = \u00a79 - Location: ({0}, {1}, {2}, {3}) whoisHealth=\u00a79 - Health: {0}/20
whoisMoney = \u00a79 - Money: {0} whoisIPAddress=\u00a79 - IP Address: {0}
whoisStatusAvailable = \u00a79 - Status: Available whoisIs={0} is {1}
whoisStatusAway = \u00a79 - Status: \u00a7cAway\u00a7f whoisLocation=\u00a79 - Location: ({0}, {1}, {2}, {3})
worth = \u00a77Stack of {0} worth \u00a7c{1}\u00a77 ({2} item(s) at {3} each) whoisMoney=\u00a79 - Money: {0}
worthMeta = \u00a77Stack of {0} with metadata of {1} worth \u00a7c{2}\u00a77 ({3} item(s) at {4} each) whoisOP=\u00a79 - OP: {0}
worthSet = Worth value set whoisStatusAvailable=\u00a79 - Status: Available
year = year whoisStatusAway=\u00a79 - Status: \u00a7cAway\u00a7f
years = years worth=\u00a77Stack of {0} worth \u00a7c{1}\u00a77 ({2} item(s) at {3} each)
youAreHealed = \u00a77You have been healed. worthMeta=\u00a77Stack of {0} with metadata of {1} worth \u00a7c{2}\u00a77 ({3} item(s) at {4} each)
youHaveNewMail = \u00a7cYou have {0} messages!\u00a7f Type \u00a77/mail read\u00a7f to view your mail. worthSet=Worth value set
year=year
years=years
youAreHealed=\u00a77You have been healed.
youHaveNewMail=\u00a7cYou have {0} messages!\u00a7f Type \u00a77/mail read\u00a7f to view your mail.

View File

@@ -2,372 +2,377 @@
# Single quotes have to be doubled: '' # Single quotes have to be doubled: ''
# Translations start here # Translations start here
# by: papand13, papand13@gmail.com # by: papand13, papand13@gmail.com
addedToAccount = \u00a7a{0} er tilf\u00f8jet til din konto. action=* {0} {1}
addedToOthersAccount = \u00a7a{0} er blevet tilf\u00f8jet til {1} konto. addedToAccount=\u00a7a{0} er tilf\u00f8jet til din konto.
alertBroke = \u00f8delagde: addedToOthersAccount=\u00a7a{0} er blevet tilf\u00f8jet til {1} konto.
alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} ved: {3} alertBroke=\u00f8delagde:
alertPlaced = placerede: alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} ved: {3}
alertUsed = brugte: alertPlaced=placerede:
alertUsed=brugte:
autoAfkKickReason=You have been kicked for idling more than {0} minutes. autoAfkKickReason=You have been kicked for idling more than {0} minutes.
backAfterDeath = \u00a77Brug /back kommandoen for at retunere til dit d\u00f8ds punkt. backAfterDeath=\u00a77Brug /back kommandoen for at retunere til dit d\u00f8ds punkt.
backUsageMsg = \u00a77Returnere til tidligere placering. backUsageMsg=\u00a77Returnere til tidligere placering.
backupFinished = Backup sluttede backupFinished=Backup sluttede
backupStarted = Backup startede backupStarted=Backup startede
balance = \u00a77Balance: {0} balance=\u00a77Balance: {0}
balanceTop = \u00a77 Top {0} saldi balanceTop=\u00a77 Top {0} saldi
banExempt = \u00a7cDu kan ikke forbyde den p\u00e5g\u00e6ldende spiller. banExempt=\u00a7cDu kan ikke forbyde den p\u00e5g\u00e6ldende spiller.
banIpAddress = \u00a77Bannede IP addresse banIpAddress=\u00a77Bannede IP addresse
bannedIpsFileError = Fejl i l\u00e6sning af banned-ips.txt bannedIpsFileError=Fejl i l\u00e6sning af banned-ips.txt
bannedIpsFileNotFound = banned-ips.txt ikke fundet bannedIpsFileNotFound=banned-ips.txt ikke fundet
bannedPlayersFileError = Fejl i l\u00e6sning af banned-players.txt bannedPlayersFileError=Fejl i l\u00e6sning af banned-players.txt
bannedPlayersFileNotFound = banned-players.txt ikke fundet bannedPlayersFileNotFound=banned-players.txt ikke fundet
bigTreeFailure = \u00a7cStort tr\u00e6 genererings fejl. Pr\u00f8v igen p\u00e5 gr\u00e6s eller jord. bigTreeFailure=\u00a7cStort tr\u00e6 genererings fejl. Pr\u00f8v igen p\u00e5 gr\u00e6s eller jord.
bigTreeSuccess = \u00a77Stort tr\u00e6 fremkaldt. bigTreeSuccess= \u00a77Stort tr\u00e6 fremkaldt.
broadcast = [\u00a7cMeddelelse\u00a7f]\u00a7a {0} broadcast=[\u00a7cMeddelelse\u00a7f]\u00a7a {0}
buildAlert = \u00a7cDu er ikke tilladt at bygge! buildAlert=\u00a7cDu er ikke tilladt at bygge!
bukkitFormatChanged = Bukkit version format \u00e6ndret. Version er ikke checket. bukkitFormatChanged=Bukkit version format \u00e6ndret. Version er ikke checket.
burnMsg = \u00a77Du satte ild til {0} for {1} sekunder. burnMsg=\u00a77Du satte ild til {0} for {1} sekunder.
canTalkAgain = \u00a77Du kan snakke igen canTalkAgain=\u00a77Du kan snakke igen
cantFindGeoIpDB = Kan ikke finde GeoIP database! cantFindGeoIpDB=Kan ikke finde GeoIP database!
cantReadGeoIpDB = Fejl ved l\u00e6sning af GeoIP database! cantReadGeoIpDB=Fejl ved l\u00e6sning af GeoIP database!
cantSpawnItem = \u00a7cDu er ikke tilladt at spawne elementet {0} cantSpawnItem=\u00a7cDu er ikke tilladt at spawne elementet {0}
commandFailed = Kommando {0} fejlede: commandFailed=Kommando {0} fejlede:
commandHelpFailedForPlugin=Fejl ved at f\u00e5 hj\u00e6lp til: {0} commandHelpFailedForPlugin=Fejl ved at f\u00e5 hj\u00e6lp til: {0}
commandNotLoaded = \u00a7cCommand {0} er ikke indl\u00e6st korrekt. commandNotLoaded=\u00a7cCommand {0} er ikke indl\u00e6st korrekt.
compassBearing = \u00a77B\u00e6rer: {0} ({1} grader). compassBearing=\u00a77B\u00e6rer: {0} ({1} grader).
configFileMoveError = Kunne ikke flytte config.yml til backup placering. configFileMoveError=Kunne ikke flytte config.yml til backup placering.
configFileRenameError = Kunne ikke omd\u00f8be temp fil til config.yml configFileRenameError=Kunne ikke omd\u00f8be temp fil til config.yml
connectedPlayers = Tilsluttede spillere: connectedPlayers=Tilsluttede spillere:
connectionFailed = Failed ved \u00e5bning af forbindelse. connectionFailed=Failed ved \u00e5bning af forbindelse.
cooldownWithMessage = \u00a7cNedk\u00f8lning: {0} cooldownWithMessage=\u00a7cNedk\u00f8lning: {0}
corruptNodeInConfig = \u00a74Notice: Din konfigurations fil har en korrupt {0} node. corruptNodeInConfig=\u00a74Notice: Din konfigurations fil har en korrupt {0} node.
couldNotFindTemplate = Kunne ikke finde skabelon {0} couldNotFindTemplate=Kunne ikke finde skabelon {0}
creatingConfigFromTemplate = Opretter config fra skabelon: {0} creatingConfigFromTemplate=Opretter config fra skabelon: {0}
creatingEmptyConfig = Opretter tom config: {0} creatingEmptyConfig=Opretter tom config: {0}
creatingPortal = Opretter portal ved {0},{1},{2}. creative=creative
day = dag day=dag
days = dage days=dage
defaultBanReason = Ban hammeren har talt! defaultBanReason=Ban hammeren har talt!
deleteFileError = Kunne ikke slette fil: {0} deleteFileError=Kunne ikke slette fil: {0}
deleteHome = \u00a77Home {0} has been removed. deleteHome=\u00a77Home {0} has been removed.
deleteJail = \u00a77F\u00e6ngsel {0} er fjernet. deleteJail=\u00a77F\u00e6ngsel {0} er fjernet.
deleteWarp = \u00a77Warp {0} er fjernet. deleteWarp=\u00a77Warp {0} er fjernet.
deniedAccessCommand = {0} var n\u00e6gtet adgang til kommando. deniedAccessCommand={0} var n\u00e6gtet adgang til kommando.
dependancyDownloaded = [Essentials] Dependancy {0} downloaded successfully. dependancyDownloaded=[Essentials] Dependancy {0} downloaded successfully.
dependancyException = [Essentials] An error occured when trying to download a dependacy dependancyException=[Essentials] An error occured when trying to download a dependacy
dependancyNotFound = [Essentials] A required dependancy was not found, downloading now. dependancyNotFound=[Essentials] A required dependancy was not found, downloading now.
depth = \u00a77Du er ved havoverfladen. depth=\u00a77Du er ved havoverfladen.
depthAboveSea = \u00a77Du er {0} blok(ke) over havoverfladen. depthAboveSea=\u00a77Du er {0} blok(ke) over havoverfladen.
depthBelowSea = \u00a77Du er {0} blok(ke) under havoverfladen. depthBelowSea=\u00a77Du er {0} blok(ke) under havoverfladen.
destinationNotSet = Destination er ikke sat destinationNotSet=Destination er ikke sat
disableUnlimited = \u00a77Deaktiverede ubergr\u00e6nset placering af {0} for {1}. disableUnlimited=\u00a77Deaktiverede ubergr\u00e6nset placering af {0} for {1}.
disabled = deaktiveret disabled=deaktiveret
dontMoveMessage = \u00a77Teleportering vil begynde om {0}. Bev\u00e6g dig ikke. dontMoveMessage=\u00a77Teleportering vil begynde om {0}. Bev\u00e6g dig ikke.
downloadingGeoIp = Downloader GeoIP database ... det her kan tage et stykke tid (land: 0.6 MB, by: 20MB) downloadingGeoIp=Downloader GeoIP database ... det her kan tage et stykke tid (land: 0.6 MB, by: 20MB)
duplicatedUserdata = Duplikerede userdata: {0} og {1} duplicatedUserdata=Duplikerede userdata: {0} og {1}
enableUnlimited = \u00a77Giver ubegr\u00e6nset m\u00e6ngde af {0} til {1}. enableUnlimited=\u00a77Giver ubegr\u00e6nset m\u00e6ngde af {0} til {1}.
enabled = aktiveret enabled=aktiveret
errorCallingCommand = Fejl ved opkald af kommando /{0} errorCallingCommand=Fejl ved opkald af kommando /{0}
errorWithMessage = \u00a7cFejl: {0} errorWithMessage=\u00a7cFejl: {0}
essentialsReload = \u00a77Essentials Genindl\u00e6st {0} essentialsReload=\u00a77Essentials Genindl\u00e6st {0}
extinguish = \u00a77Du slukkede dig selv. extinguish=\u00a77Du slukkede dig selv.
extinguishOthers = \u00a77Du slukkede {0}. extinguishOthers=\u00a77Du slukkede {0}.
failedToCloseConfig = Fejlede i at lukke config {0} failedToCloseConfig=Fejlede i at lukke config {0}
failedToCreateConfig = Fejl i oprettelse af config {0} failedToCreateConfig=Fejl i oprettelse af config {0}
failedToWriteConfig = Fejlede i at skrive config {0} failedToWriteConfig=Fejlede i at skrive config {0}
fileRenameError = Resterende fil {0} fejlede false=false
foreverAlone = \u00a7cDu har ingen du kan svare. fileRenameError=Resterende fil {0} fejlede
freedMemory = Befriede {0} MB. foreverAlone=\u00a7cDu har ingen du kan svare.
gcchunks = stykker, freedMemory=Befriede {0} MB.
gcentities = enheder gameMode=\u00a77Set game mode {0} for {1}.
gcfree = Free memory: {0} MB gcchunks= stykker,
gcmax = Maximum memory: {0} MB gcentities= enheder
gctotal = Allocated memory: {0} MB gcfree=Free memory: {0} MB
generatingPortal = \u00a77Genererer en udgangs portal. gcmax=Maximum memory: {0} MB
geoIpUrlEmpty = GeoIP download url er tom. gctotal=Allocated memory: {0} MB
geoIpUrlInvalid = GeoIP download url er ugyldig. geoIpUrlEmpty=GeoIP download url er tom.
geoipJoinFormat = Spiller {0} kommer fra {1} geoIpUrlInvalid=GeoIP download url er ugyldig.
godDisabledFor = deaktiveret for {0} geoipJoinFormat=Spiller {0} kommer fra {1}
godEnabledFor = aktiveret for {0} godDisabledFor=deaktiveret for {0}
godMode = \u00a77Gud tilstand {0}. godEnabledFor=aktiveret for {0}
haveBeenReleased = \u00a77Du er blevet l\u00f8sladt godMode=\u00a77Gud tilstand {0}.
heal = \u00a77Du er blevet helbredt. haveBeenReleased=\u00a77Du er blevet l\u00f8sladt
healOther = \u00a77Helbredt {0}. heal=\u00a77Du er blevet helbredt.
helpConsole = For at se hj\u00e6lp fra konsolen, skriv ?. healOther=\u00a77Helbredt {0}.
helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpConsole=For at se hj\u00e6lp fra konsolen, skriv ?.
helpPages = Side \u00a7c{0}\u00a7f af \u00a7c{1}\u00a7f: helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
holeInFloor = Hul i gulv helpPages=Side \u00a7c{0}\u00a7f af \u00a7c{1}\u00a7f:
homeSet = \u00a77Hjem sat. holeInFloor=Hul i gulv
homeSetToBed = \u00a77Dit hjem er nu sat til denne seng. homeSet=\u00a77Hjem sat.
homes = Homes: {0} homeSetToBed=\u00a77Dit hjem er nu sat til denne seng.
hour = time homes=Homes: {0}
hours = timer hour=time
ignorePlayer = Du ignorere spiller {0} fra nu af. hours=timer
illegalDate = Ilegal dato format. ignorePlayer=Du ignorere spiller {0} fra nu af.
infoChapter = V\u00e6lg kapitel: illegalDate=Ilegal dato format.
infoChapterPages = Kapitel {0}, side \u00a7c{1}\u00a7f af \u00a7c{2}\u00a7f: infoChapter=V\u00e6lg kapitel:
infoFileDoesNotExist = Fil info.txt eksisterer ikke. Laver en for dig. infoChapterPages=Kapitel {0}, side \u00a7c{1}\u00a7f af \u00a7c{2}\u00a7f:
infoPages = Side \u00a7c{0}\u00a7f af \u00a7c{1}\u00a7f: infoFileDoesNotExist=Fil info.txt eksisterer ikke. Laver en for dig.
infoUnknownChapter = Ukendt kapitel. infoPages=Side \u00a7c{0}\u00a7f af \u00a7c{1}\u00a7f:
invBigger = Den anden brugers inventory er st\u00f8rre end din. infoUnknownChapter=Ukendt kapitel.
invRestored = Din inventory er blevet genoprettet. invBigger=Den anden brugers inventory er st\u00f8rre end din.
invSee = Du ser inventoryen af {0}. invRestored=Din inventory er blevet genoprettet.
invSeeHelp = Brug /invsee for at genoprette din inventory. invSee=Du ser inventoryen af {0}.
invalidCharge = \u00a7cUgyldig opladning. invSeeHelp=Brug /invsee for at genoprette din inventory.
invalidMob = Ugyldig mob type. invalidCharge=\u00a7cUgyldig opladning.
invalidServer = Ugyldig server! invalidMob=Ugyldig mob type.
invalidSignLine = Linje {0} p\u00e5 skilt er ugyldig. invalidServer=Ugyldig server!
invalidWorld = \u00a7cUgyldig verden. invalidSignLine=Linje {0} p\u00e5 skilt er ugyldig.
inventoryCleared = \u00a77Inventory ryddet. invalidWorld=\u00a7cUgyldig verden.
inventoryClearedOthers = \u00a77Inventory af \u00a7c{0}\u00a77 ryddet. inventoryCleared=\u00a77Inventory ryddet.
is = er inventoryClearedOthers=\u00a77Inventory af \u00a7c{0}\u00a77 ryddet.
itemCannotBeSold = Det element kan ikke s\u00e6lges til serveren. is=er
itemMustBeStacked = Element skal handles i stakke. En m\u00e6ngde af 2s ville v\u00e6re to stakke, osv. itemCannotBeSold=Det element kan ikke s\u00e6lges til serveren.
itemNotEnough1 = \u00a7cDu har ikke nok af det element til at s\u00e6lge. itemMustBeStacked=Element skal handles i stakke. En m\u00e6ngde af 2s ville v\u00e6re to stakke, osv.
itemNotEnough2 = \u00a77Hvis du ville have solgt alle dine elementer af den type, brug /sell elementnavn itemNotEnough1=\u00a7cDu har ikke nok af det element til at s\u00e6lge.
itemNotEnough3 = \u00a77/sell elementnavn -1 vil s\u00e6lge alle p\u00e5 n\u00e6r et element, osv. itemNotEnough2=\u00a77Hvis du ville have solgt alle dine elementer af den type, brug /sell elementnavn
itemSellAir = Fors\u00f8gte du virkelig at s\u00e6lge luft? Kom et element i din h\u00e5nd. itemNotEnough3=\u00a77/sell elementnavn -1 vil s\u00e6lge alle p\u00e5 n\u00e6r et element, osv.
itemSold = \u00a77Solgte for \u00a7c {0} \u00a77 ({1} elementer for {2} hver) itemSellAir=Fors\u00f8gte du virkelig at s\u00e6lge luft? Kom et element i din h\u00e5nd.
itemSoldConsole = {0} solgte {1} for \u00a77 {2} \u00a77 ({3} elementer for {4} hver) itemSold=\u00a77Solgte for \u00a7c{0} \u00a77({1} {2} elementer for {3} hver)
itemSpawn = \u00a77Giver {0} af {1} itemSoldConsole={0} solgte {1} for \u00a77{2} \u00a77({3} elementer for {4} hver)
itemsCsvNotLoaded = Kunne ikke indl\u00e6se items.csv. itemSpawn=\u00a77Giver {0} af {1}
jailAlreadyIncarcerated = \u00a7cPerson is already in jail: {0} itemsCsvNotLoaded=Kunne ikke indl\u00e6se items.csv.
jailMessage = \u00a7cBryd reglerne, og tag din straf. jailAlreadyIncarcerated=\u00a7cPerson is already in jail: {0}
jailNotExist = Det f\u00e6ngsel eksisterer ikke. jailMessage=\u00a7cBryd reglerne, og tag din straf.
jailReleased = \u00a77Player \u00a7e{0}\u00a77 unjailed. jailNotExist=Det f\u00e6ngsel eksisterer ikke.
jailReleasedPlayerNotify = \u00a77You have been released! jailReleased=\u00a77Player \u00a7e{0}\u00a77 unjailed.
jailSentenceExtended = Jail time extend to: {0) jailReleasedPlayerNotify=\u00a77You have been released!
jailSet = \u00a77F\u00e6ngsel {0} er blevet sat jailSentenceExtended=Jail time extend to: {0)
jumpError = Det ville skade din computer''s hjerne. jailSet=\u00a77F\u00e6ngsel {0} er blevet sat
kickDefault = Kicket fra serveren jumpError=Det ville skade din computer''s hjerne.
kickExempt = \u00a77Du kan ikke sparke denne spiller. kickDefault=Kicket fra serveren
kill = \u00a77Dr\u00e6bte {0}. kickExempt=\u00a77Du kan ikke sparke denne spiller.
kitError = \u00a7cDer er ikke nogen gyldige pakker. kill=\u00a77Dr\u00e6bte {0}.
kitError2 = \u00a7cDen pakke eksisterer ikke eller er forkert defineret. kitError=\u00a7cDer er ikke nogen gyldige pakker.
kitErrorHelp = \u00a7cM\u00e5ske mangler et element en m\u00e6ngde i konfigurationen? kitError2=\u00a7cDen pakke eksisterer ikke eller er forkert defineret.
kitGive = \u00a77Giver pakke {0}. kitErrorHelp=\u00a7cM\u00e5ske mangler et element en m\u00e6ngde i konfigurationen?
kitInvFull = \u00a7cDin inventory var fuld, placere pakken p\u00e5 gulvet kitGive=\u00a77Giver pakke {0}.
kitTimed = \u00a7cDu kan ikke den pakke igen f\u00f8r om {0}. kitInvFull=\u00a7cDin inventory var fuld, placere pakken p\u00e5 gulvet
kits = \u00a77Pakker: {0} kitTimed=\u00a7cDu kan ikke den pakke igen f\u00f8r om {0}.
lightningSmited = \u00a77Du er blevet sl\u00e5et kits=\u00a77Pakker: {0}
lightningUse = \u00a77Sl\u00e5r {0} lightningSmited=\u00a77Du er blevet sl\u00e5et
loadWarpError = Kunne ikke indl\u00e6se warp {0} lightningUse=\u00a77Sl\u00e5r {0}
loadinfo = Indl\u00e6ste {0} byg {1} af {2} loadWarpError=Kunne ikke indl\u00e6se warp {0}
localFormat = Lokal: <{0}> {1} loadinfo=Indl\u00e6ste {0} byg {1} af {2}
mailClear = \u00a7cFor at markere din post som l\u00e6st, skriv /mail clear localFormat=Lokal: <{0}> {1}
mailCleared = \u00a77Post ryddet! mailClear=\u00a7cFor at markere din post som l\u00e6st, skriv /mail clear
mailSent = \u00a77Post sendt! mailCleared=\u00a77Post ryddet!
markMailAsRead = \u00a7cTo marker din post som l\u00e6st, skriv /post ryd mailSent=\u00a77Post sendt!
markedAsAway = \u00a77Du er nu markeret som v\u00e6k. markMailAsRead=\u00a7cTo marker din post som l\u00e6st, skriv /post ryd
markedAsNotAway = \u00a77Du er ikke l\u00e6ngere markeret som v\u00e6k. markedAsAway=\u00a77Du er nu markeret som v\u00e6k.
markedAsNotAway=\u00a77Du er ikke l\u00e6ngere markeret som v\u00e6k.
maxHomes=You cannot set more than {0} homes. maxHomes=You cannot set more than {0} homes.
mayNotJail = \u00a7cDu m\u00e5 ikke f\u00e6ngsle den person mayNotJail=\u00a7cDu m\u00e5 ikke f\u00e6ngsle den person
me = mig me=mig
minute = minut minute=minut
minutes = minutter minutes=minutter
missingItems = Du har ikke {0}x {1}. missingItems=Du har ikke {0}x {1}.
missingPrefixSuffix = Mangler et pr\u00e6fiks eller suffiks for {0} missingPrefixSuffix=Mangler et pr\u00e6fiks eller suffiks for {0}
mobSpawnError = Fejl ved \u00e6ndring af mob fremkalder. mobSpawnError=Fejl ved \u00e6ndring af mob fremkalder.
mobSpawnLimit = Mob m\u00e6ngde begr\u00e6nset til server gr\u00e6nse mobSpawnLimit=Mob m\u00e6ngde begr\u00e6nset til server gr\u00e6nse
mobSpawnTarget = M\u00e5l blok skal v\u00e6re en mob fremkalder. mobSpawnTarget=M\u00e5l blok skal v\u00e6re en mob fremkalder.
moneyRecievedFrom = \u00a7a{0} er modtaget fra {1} mobsAvailable=\u00a77Mobs: {0}
moneySentTo = \u00a7a{0} er sendt til {1} moneyRecievedFrom=\u00a7a{0} er modtaget fra {1}
moneyTaken = {0} taget fra din bank konto. moneySentTo=\u00a7a{0} er sendt til {1}
month = m\u00e5ned moneyTaken={0} taget fra din bank konto.
months = m\u00e5neder month=m\u00e5ned
moreThanZero = M\u00e6ngder skal v\u00e6re st\u00f8rre end 0. months=m\u00e5neder
msgFormat = \u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2} moreThanZero=M\u00e6ngder skal v\u00e6re st\u00f8rre end 0.
muteExempt = \u00a7cYou may not mute that player. msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
mutedPlayer = Spiller {0} d\u00e6mpet. muteExempt=\u00a7cYou may not mute that player.
mutedPlayerFor = Spiller {0} d\u00e6mpet for {1}. mutedPlayer=Spiller {0} d\u00e6mpet.
mutedUserSpeaks = {0} pr\u00f8vede at snakke, men er muted. mutedPlayerFor=Spiller {0} d\u00e6mpet for {1}.
needTpohere = Du skal have adgang til /tpohere for at teleporter andre spillere. mutedUserSpeaks={0} pr\u00f8vede at snakke, men er muted.
negativeBalanceError = Brugeren er ikke tilladt at have en negativ saldo. needTpohere=Du skal have adgang til /tpohere for at teleporter andre spillere.
nickChanged = Kaldenavn \u00e6ndret. negativeBalanceError=Brugeren er ikke tilladt at have en negativ saldo.
nickChanged=Kaldenavn \u00e6ndret.
nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickDisplayName=\u00a77You have to enable change-displayname in Essentials config.
nickInUse = \u00a7cDet navn er allerede i brug. nickInUse=\u00a7cDet navn er allerede i brug.
nickNamesAlpha = \u00a7cKaldenavne skal v\u00e6re alfanumeriske. nickNamesAlpha=\u00a7cKaldenavne skal v\u00e6re alfanumeriske.
nickNoMore = \u00a7Du har ikke l\u00e6ngere et kaldenavn. nickNoMore=\u00a7Du har ikke l\u00e6ngere et kaldenavn.
nickOthersPermission = \u00a7cDu har ikke tilladelse til at \u00e6ndre andres kaldenavn nickOthersPermission=\u00a7cDu har ikke tilladelse til at \u00e6ndre andres kaldenavn
nickSet = \u00a77Dit kaldenavn er nu \u00a7c{0} nickSet=\u00a77Dit kaldenavn er nu \u00a7c{0}
noAccessCommand = \u00a7cDu har ikke adgang til den kommando. noAccessCommand=\u00a7cDu har ikke adgang til den kommando.
noAccessPermission = \u00a7cDu har ikke tilladelse til at f\u00e5 adgang til det {0}. noAccessPermission=\u00a7cDu har ikke tilladelse til at f\u00e5 adgang til det {0}.
noDestroyPermission = \u00a7cDu har ikke tilladelse til at \u00f8del\u00e6gge det {0}. noDestroyPermission=\u00a7cDu har ikke tilladelse til at \u00f8del\u00e6gge det {0}.
noHelpFound = \u00a7cNo matching commands. noHelpFound=\u00a7cNo matching commands.
noHomeSet = Du har sat et nyt hjem. noHomeSet=Du har sat et nyt hjem.
noHomeSetPlayer = Spiller har ikke sat et hjem. noHomeSetPlayer=Spiller har ikke sat et hjem.
noKitPermission = \u00a7cDu har brug for \u00a7c{0}\u00a7c tilladelsen for at bruge den pakke. noKitPermission=\u00a7cDu har brug for \u00a7c{0}\u00a7c tilladelsen for at bruge den pakke.
noKits = \u00a77Der er ikke nogen pakker tilg\u00e6ngelig endnu noKits=\u00a77Der er ikke nogen pakker tilg\u00e6ngelig endnu
noMail = Du har ikke noget post noMail=Du har ikke noget post
noMailSendPerm = \u00a7cDu har ikke \u00a7fessentials.mail.send\u00a7c tilladelsen. noMailSendPerm=\u00a7cDu har ikke \u00a7fessentials.mail.send\u00a7c tilladelsen.
noMotd = \u00a7cDer er ikke nogen besked for dagen. noMotd=\u00a7cDer er ikke nogen besked for dagen.
noNewMail = \u00a77Du har ingen ny post. noNewMail=\u00a77Du har ingen ny post.
noPendingRequest = Du har ikke en ventende anmodning. noPendingRequest=Du har ikke en ventende anmodning.
noPlacePermission = \u00a7cYou do not have permission to place a block near that sign. noPlacePermission=\u00a7cYou do not have permission to place a block near that sign.
noPowerTools= You have no power tools assigned. noPowerTools= You have no power tools assigned.
noRules = \u00a7cDer er ingen regler fastsat endnu. noRules=\u00a7cDer er ingen regler fastsat endnu.
noWarpsDefined = Ingen warps defineret noWarpsDefined=Ingen warps defineret
none = ingen none=ingen
notAllowedToQuestion = \u00a7cDu er ikke autoriseret til at bruge et sp\u00f8rgsm\u00e5l. notAllowedToQuestion=\u00a7cDu er ikke autoriseret til at bruge et sp\u00f8rgsm\u00e5l.
notAllowedToShout = \u00a7cDu er ikke autoriseret til at r\u00e5be. notAllowedToShout=\u00a7cDu er ikke autoriseret til at r\u00e5be.
notEnoughMoney = Du har ikke tilstr\u00e6kkelig penge. notEnoughMoney=Du har ikke tilstr\u00e6kkelig penge.
notRecommendedBukkit = Bukkit version er ikke den anbefalede byg for Essentials. notRecommendedBukkit=Bukkit version er ikke den anbefalede byg for Essentials.
notSupportedYet = Ikke underst\u00f8ttet endnu. notSupportedYet=Ikke underst\u00f8ttet endnu.
now = nu now=nu
numberRequired = Der skal v\u00e6re et nummer, fjolle. numberRequired=Der skal v\u00e6re et nummer, fjolle.
onlyDayNight = /time underst\u00f8tter kun day/night. onlyDayNight=/time underst\u00f8tter kun day/night.
onlyPlayers = Kun in-game spillere kan bruge {0}. onlyPlayers=Kun in-game spillere kan bruge {0}.
onlySunStorm = /weather only supports sun/storm. onlySunStorm=/weather only supports sun/storm.
pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
pTimePlayers = These players have their own time: pTimePlayers=These players have their own time:
pTimeReset = Player time has been reset for: \u00a7e{0} pTimeReset=Player time has been reset for: \u00a7e{0}
pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
parseError = Fejl ved parsing {0} p\u00e5 linje {1} parseError=Fejl ved parsing {0} p\u00e5 linje {1}
pendingTeleportCancelled = \u00a7cVentende teleportations anmodning aflyst. pendingTeleportCancelled=\u00a7cVentende teleportations anmodning aflyst.
permissionsError = Mangler Permissions/GroupManager; chat pr\u00e6fikser/suffikser vil v\u00e6re sl\u00e5et fra. permissionsError=Mangler Permissions/GroupManager; chat pr\u00e6fikser/suffikser vil v\u00e6re sl\u00e5et fra.
playerBanned = \u00a7cPlayer {0} banned {1} for {2} playerBanned=\u00a7cPlayer {0} banned {1} for {2}
playerInJail = \u00a7cSpiller er allerede i f\u00e6ngsel {0}. playerInJail=\u00a7cSpiller er allerede i f\u00e6ngsel {0}.
playerJailed = \u00a77Spiller {0} f\u00e6ngslet. playerJailed=\u00a77Spiller {0} f\u00e6ngslet.
playerJailedFor = \u00a77Spiller {0} f\u00e6ngslet for {1}. playerJailedFor= \u00a77Spiller {0} f\u00e6ngslet for {1}.
playerKicked = \u00a7cPlayer {0} kicked {1} for {2} playerKicked=\u00a7cPlayer {0} kicked {1} for {2}
playerMuted = \u00a77You have been muted playerMuted=\u00a77You have been muted
playerMutedFor = \u00a77You have been muted for {0} playerMutedFor=\u00a77You have been muted for {0}
playerNeverOnServer = \u00a7cSpiller {0} var aldrig p\u00e5 denne server. playerNeverOnServer=\u00a7cSpiller {0} var aldrig p\u00e5 denne server.
playerNotFound = \u00a7cSpiller ikke fundet. playerNotFound=\u00a7cSpiller ikke fundet.
playerUnmuted = \u00a77You have been unmuted playerUnmuted=\u00a77You have been unmuted
pong = Pong! pong=Pong!
possibleWorlds = \u00a77Mulige verdener er numrene 0 igennem {0}. possibleWorlds=\u00a77Mulige verdener er numrene 0 igennem {0}.
powerToolAir = Kommando kan ikke blive tildelt luft. powerToolAir=Kommando kan ikke blive tildelt luft.
powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. powerToolAlreadySet=Command \u00a7c{0}\u00a7f is already assigned to {1}.
powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. powerToolAttach=\u00a7c{0}\u00a7f command assigned to {1}.
powerToolClearAll = All powertool commands have been cleared. powerToolClearAll=All powertool commands have been cleared.
powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. powerToolList={1} has the following commands: \u00a7c{0}\u00a7f.
powerToolListEmpty = {0} has no commands assigned. powerToolListEmpty={0} has no commands assigned.
powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. powerToolNoSuchCommandAssigned=Command \u00a7c{0}\u00a7f has not been assigned to {1}.
powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemove=Command \u00a7c{0}\u00a7f removed from {1}.
powerToolRemoveAll = All commands removed from {0}. powerToolRemoveAll=All commands removed from {0}.
powerToolsEnabled= All of your power tools have been enabled.
powerToolsDisabled= All of your power tools have been disabled. powerToolsDisabled= All of your power tools have been disabled.
protectionOwner = \u00a76[EssentialsProtect] Beskyttelses ejer: {0} powerToolsEnabled= All of your power tools have been enabled.
questionFormat = \u00a77[Sp\u00f8rgsm\u00e5l]\u00a7f {0} protectionOwner=\u00a76[EssentialsProtect] Beskyttelses ejer: {0}
reloadAllPlugins = \u00a77Genindl\u00e6ste alle tilf\u00f8jelser. questionFormat=\u00a77[Sp\u00f8rgsm\u00e5l]\u00a7f {0}
repair = You have successfully repaired your: \u00a7e{0}. reloadAllPlugins=\u00a77Genindl\u00e6ste alle tilf\u00f8jelser.
repairAlreadyFixed = \u00a77This item does not need repairing. repair=You have successfully repaired your: \u00a7e{0}.
repairInvalidType = \u00a7cThis item cannot be repaired. repairAlreadyFixed=\u00a77This item does not need repairing.
repairNone = There were no items that needing repairing. repairInvalidType=\u00a7cThis item cannot be repaired.
requestAccepted = \u00a77Teleporterings anmodning n\u00e6gtet. repairNone=There were no items that needing repairing.
requestAcceptedFrom = \u00a77{0} accepted your teleport request. requestAccepted=\u00a77Teleporterings anmodning n\u00e6gtet.
requestDenied = \u00a77Teleporterings anmodning n\u00e6gtet. requestAcceptedFrom=\u00a77{0} accepted your teleport request.
requestDeniedFrom = \u00a77{0} denied your teleport request. requestDenied=\u00a77Teleporterings anmodning n\u00e6gtet.
requestSent = \u00a77Anmodning sendt til {0}\u00a77. requestDeniedFrom=\u00a77{0} denied your teleport request.
returnPlayerToJailError = En fejl opstod ved fors\u00f8g p\u00e5 at returnere spiller til f\u00e6ngsel. requestSent=\u00a77Anmodning sendt til {0}\u00a77.
second = sekunde returnPlayerToJailError=En fejl opstod ved fors\u00f8g p\u00e5 at returnere spiller til f\u00e6ngsel.
seconds = sekunder second=sekunde
seenOffline = Spiller {0} er offline siden {1} seconds=sekunder
seenOnline = Spiller {0} er online siden {1} seenOffline=Spiller {0} er offline siden {1}
serverFull = Server er fuld seenOnline=Spiller {0} er online siden {1}
setSpawner = Changed spawner type to {0} serverFull=Server er fuld
sheepMalformedColor = Misdannet farve. setSpawner=Changed spawner type to {0}
shoutFormat = \u00a77[R\u00e5b]\u00a7f {0} sheepMalformedColor=Misdannet farve.
signFormatFail = \u00a74[{0}] shoutFormat=\u00a77[R\u00e5b]\u00a7f {0}
signFormatSuccess = \u00a71[{0}] signFormatFail=\u00a74[{0}]
signFormatTemplate = [{0}] signFormatSuccess=\u00a71[{0}]
signProtectInvalidLocation = \u00a74You are not allowed to create sign here. signFormatTemplate=[{0}]
similarWarpExist = En warp med lignende tekst eksisterer allerede. signProtectInvalidLocation=\u00a74You are not allowed to create sign here.
slimeMalformedSize = Misdannet st\u00f8rrelse. similarWarpExist=En warp med lignende tekst eksisterer allerede.
soloMob = Den mob kan godt lide at v\u00e6re alene slimeMalformedSize=Misdannet st\u00f8rrelse.
spawnSet = \u00a77Spawn placering sat for gruppe {0}. soloMob=Den mob kan godt lide at v\u00e6re alene
spawned = spawnet spawnSet=\u00a77Spawn placering sat for gruppe {0}.
suicideMessage = \u00a77Farvel grusomme verden... spawned=spawnet
suicideSuccess = \u00a77{0} tog sit eget liv suicideMessage=\u00a77Farvel grusomme verden...
takenFromAccount = \u00a7c{0} er taget fra din konto. suicideSuccess= \u00a77{0} tog sit eget liv
takenFromOthersAccount = \u00a7c{0} er blevet taget fra {1} konto. survival=survival
teleportAAll = \u00a77Teleporting request sent to all players... takenFromAccount=\u00a7c{0} er taget fra din konto.
teleportAll = \u00a77Teleportere alle spillere... takenFromOthersAccount=\u00a7c{0} er blevet taget fra {1} konto.
teleportAtoB = \u00a77{0}\u00a77 teleporterede dig til {1}\u00a77. teleportAAll=\u00a77Teleporting request sent to all players...
teleportDisabled = {0} har teleportation deaktiveret. teleportAll=\u00a77Teleportere alle spillere...
teleportHereRequest = \u00a7c{0}\u00a7c har anmodet at du teleportere dig til ham/hende. teleportAtoB=\u00a77{0}\u00a77 teleporterede dig til {1}\u00a77.
teleportNewPlayerError = Failed ved teleportering af ny spiller teleportDisabled={0} har teleportation deaktiveret.
teleportRequest = \u00a7c{0}\u00a7c har anmodet om at teleportere til dig. teleportHereRequest=\u00a7c{0}\u00a7c har anmodet at du teleportere dig til ham/hende.
teleportTop = \u00a77Teleportere til toppen. teleportNewPlayerError=Failed ved teleportering af ny spiller
teleportationCommencing = \u00a77Teleportering begynder... teleportRequest=\u00a7c{0}\u00a7c har anmodet om at teleportere til dig.
teleportationDisabled = \u00a77Teleportering deaktiveret. teleportTop=\u00a77Teleportere til toppen.
teleportationEnabled = \u00a77Teleportering aktiveret. teleportationCommencing=\u00a77Teleportering begynder...
teleporting = \u00a77Teleportere... teleportationDisabled=\u00a77Teleportering deaktiveret.
teleportingPortal = \u00a77Teleporterede via portal. teleportationEnabled=\u00a77Teleportering aktiveret.
tempBanned = Midlertidigt bannet fra serveren for {0} teleporting=\u00a77Teleportere...
tempbanExempt = \u00a77You may not tempban that player teleportingPortal=\u00a77Teleporterede via portal.
thunder = Du {0} torden i din verden tempBanned=Midlertidigt bannet fra serveren for {0}
thunderDuration = Du {0} torden i din verden i {1} sekunder. tempbanExempt=\u00a77You may not tempban that player
timeBeforeHeal = Tid inden n\u00e6ste helbredelse: {0} thunder= Du {0} torden i din verden
timeBeforeTeleport = Tid f\u00f8r n\u00e6ste teleportering: {0} thunderDuration=Du {0} torden i din verden i {1} sekunder.
timeFormat = \u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f timeBeforeHeal=Tid inden n\u00e6ste helbredelse: {0}
timePattern = (?:([0-9]+)\\s*[a\u00e5y][a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*[wu][a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*[ht][a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)? timeBeforeTeleport=Tid f\u00f8r n\u00e6ste teleportering: {0}
timeSet = Tid er sat i alle verdener. timeFormat=\u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f
timeSetPermission = \u00a7cYou are not authorized to set the time. timePattern=(?:([0-9]+)\\s*[a\u00e5y][a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*[wu][a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*[ht][a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)?
timeWorldCurrent = The current time in {0} is \u00a73{1} timeSet=Tid er sat i alle verdener.
timeWorldSet = The time was set to {0} in: \u00a7c{1} timeSetPermission=\u00a7cYou are not authorized to set the time.
tradeCompleted = \u00a77Forhandling fuldf\u00f8rt. timeWorldCurrent=The current time in {0} is \u00a73{1}
tradeSignEmpty = Forhandlings skiltet har ikke nok forsyning tilbage. timeWorldSet=The time was set to {0} in: \u00a7c{1}
tradeSignEmptyOwner = There is nothing to collect from this trade sign. tradeCompleted=\u00a77Forhandling fuldf\u00f8rt.
treeFailure = \u00a7cTr\u00e6 genererings fejl. Pr\u00f8v igen p\u00e5 gr\u00e6s eller jord. tradeSignEmpty=Forhandlings skiltet har ikke nok forsyning tilbage.
treeSpawned = \u00a77Tr\u00e6 fremkaldt. tradeSignEmptyOwner=There is nothing to collect from this trade sign.
typeTpaccept = \u00a77For at teleportere, skriv \u00a7c/tpaccept\u00a77. treeFailure=\u00a7cTr\u00e6 genererings fejl. Pr\u00f8v igen p\u00e5 gr\u00e6s eller jord.
typeTpdeny = \u00a77For at n\u00e6gte denne anmodning, skriv \u00a7c/tpdeny\u00a77. treeSpawned=\u00a77Tr\u00e6 fremkaldt.
typeWorldName = \u00a77Du kan ogs\u00e5 skrive nanvet p\u00e5 en specifik verden. true=true
unableToSpawnMob = Kunne ikke fremkalde mob. typeTpaccept=\u00a77For at teleportere, skriv \u00a7c/tpaccept\u00a77.
unbannedIP = Tilgav IP addresse, ikke l\u00e6ngere bannet. typeTpdeny=\u00a77For at n\u00e6gte denne anmodning, skriv \u00a7c/tpdeny\u00a77.
unbannedPlayer = Tilgav spiller, ikke l\u00e6ngere bannet. typeWorldName=\u00a77Du kan ogs\u00e5 skrive nanvet p\u00e5 en specifik verden.
unignorePlayer = Du ignorere ikke spiller {0} mere. unableToSpawnMob=Kunne ikke fremkalde mob.
unknownItemId = Ukendt element id: {0} unbannedIP=Tilgav IP addresse, ikke l\u00e6ngere bannet.
unknownItemInList = Ukendt element {0} i {1} liste. unbannedPlayer=Tilgav spiller, ikke l\u00e6ngere bannet.
unknownItemName = Ukendt element navn: {0} unignorePlayer=Du ignorere ikke spiller {0} mere.
unlimitedItemPermission = \u00a7cIngen tilladelse til ubegr\u00e6nset element {0}. unknownItemId=Ukendt element id: {0}
unlimitedItems = Uendelige elementer: unknownItemInList=Ukendt element {0} i {1} liste.
unmutedPlayer = Spiller {0} ikke-d\u00e6mpet. unknownItemName=Ukendt element navn: {0}
upgradingFilesError = Fejl under opgradering af filer unlimitedItemPermission=\u00a7cIngen tilladelse til ubegr\u00e6nset element {0}.
userCreatedPortal = {0} bruge en portal og genererede en udgangs portal. unlimitedItems=Uendelige elementer:
userDoesNotExist = Brugeren {0} eksisterer ikke. unmutedPlayer=Spiller {0} ikke-d\u00e6mpet.
userIsAway = {0} er nu AFK upgradingFilesError=Fejl under opgradering af filer
userIsNotAway = {0} er ikke l\u00e6ngere AFK userDoesNotExist=Brugeren {0} eksisterer ikke.
userJailed = \u00a77Du er blevet f\u00e6ngslet userIsAway={0} er nu AFK
userUsedPortal = {0} brugte en eksisterende udgangs portal. userIsNotAway={0} er ikke l\u00e6ngere AFK
userdataMoveBackError = Kunne ikke flytte userdata/{0}.tmp til userdata/{1} userJailed=\u00a77Du er blevet f\u00e6ngslet
userdataMoveError = Kunne ikke flytte userdata/{0} til userdata/{1}.tmp userUsedPortal={0} brugte en eksisterende udgangs portal.
usingPortal = \u00a77Teleporterede via portal til en eksisterende portal. userdataMoveBackError=Kunne ikke flytte userdata/{0}.tmp til userdata/{1}
usingTempFolderForTesting = Bruger temp mappe for testing: userdataMoveError=Kunne ikke flytte userdata/{0} til userdata/{1}.tmp
versionMismatch = Version matcher ikke! Venligst opdater {0} til den nyeste version. usingTempFolderForTesting=Bruger temp mappe for testing:
versionMismatchAll = Version matcher ikke! Venligst opdater alle Essentials jar''er til samme version. versionMismatch=Version matcher ikke! Venligst opdater {0} til den nyeste version.
voiceSilenced = \u00a77Din stemme er blevet d\u00e6mpet versionMismatchAll=Version matcher ikke! Venligst opdater alle Essentials jar''er til samme version.
warpDeleteError = Problem ved sletning af warp filen. voiceSilenced=\u00a77Din stemme er blevet d\u00e6mpet
warpListPermission = \u00a7cDu har ikke tilladelse til at liste de warps. warpDeleteError=Problem ved sletning af warp filen.
warpNotExist = Den warp eksisterer ikke. warpListPermission=\u00a7cDu har ikke tilladelse til at liste de warps.
warpSet = \u00a77Warp {0} sat. warpNotExist=Den warp eksisterer ikke.
warpUsePermission = \u00a7cDu har ikke tilladelse til at benytte den warp. warpSet=\u00a77Warp {0} sat.
warpingTo = \u00a77Warper til {0}. warpUsePermission=\u00a7cDu har ikke tilladelse til at benytte den warp.
warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warpingTo=\u00a77Warper til {0}.
weatherStorm = \u00a77Du har sat vejret til storm i {0} warps=Warps: {0}
weatherStormFor = \u00a77Du har sat vejret til storm i {0} i {1} sekunder warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
weatherSun = \u00a77Du har sat vejret til sol i {0} weatherStorm=\u00a77Du har sat vejret til storm i {0}
weatherSunFor = \u00a77Du har sat vejret til sol i {0} i {1} sekunder weatherStormFor=\u00a77Du har sat vejret til storm i {0} i {1} sekunder
whoisGeoLocation = \u00a79 - Placering: {0} weatherSun=\u00a77Du har sat vejret til sol i {0}
whoisHealth = \u00a79 - Helbred: {0}/20 weatherSunFor=\u00a77Du har sat vejret til sol i {0} i {1} sekunder
whoisIPAddress = \u00a79 - IP Addresse: {0} whoisGamemode=\u00a79 - Gamemode: {0}
whoisIs = {0} er {1} whoisGeoLocation=\u00a79 - Placering: {0}
whoisLocation = \u00a79 - Placering: ({0}, {1}, {2}, {3}) whoisGod=\u00a79 - God mode: {0}
whoisMoney = \u00a79 - Penge: {0} whoisHealth=\u00a79 - Helbred: {0}/20
whoisStatusAvailable = \u00a79 - Status: Tilg\u00e6ngelig whoisIPAddress=\u00a79 - IP Addresse: {0}
whoisStatusAway = \u00a79 - Status: \u00a7cV\u00e6k\u00a7f whoisIs={0} er {1}
worth = \u00a77Stak af {0} v\u00e6rd \u00a7c{1}\u00a77 ({2} element(er) for {3} hver) whoisLocation=\u00a79 - Placering: ({0}, {1}, {2}, {3})
worthMeta = \u00a77Stak af {0} med metadata af {1} v\u00e6rd \u00a7c{2}\u00a77 ({3} element(er) for {4} hver) whoisMoney=\u00a79 - Penge: {0}
worthSet = V\u00e6rd v\u00e6rdi sat whoisOP=\u00a79 - OP: {0}
year = \u00e5r whoisStatusAvailable=\u00a79 - Status: Tilg\u00e6ngelig
years = \u00e5r whoisStatusAway=\u00a79 - Status: \u00a7cV\u00e6k\u00a7f
youAreHealed = \u00a77Du er blevet helbredt. worth=\u00a77Stak af {0} v\u00e6rd \u00a7c{1}\u00a77 ({2} element(er) for {3} hver)
youHaveNewMail = \u00a7cDu har {0} beskeder!\u00a7f Type \u00a77/post l\u00e6s\u00a7f for at se din post. worthMeta=\u00a77Stak af {0} med metadata af {1} v\u00e6rd \u00a7c{2}\u00a77 ({3} element(er) for {4} hver)
worthSet=V\u00e6rd v\u00e6rdi sat
year=\u00e5r
years=\u00e5r
youAreHealed=\u00a77Du er blevet helbredt.
youHaveNewMail=\u00a7cDu har {0} beskeder!\u00a7f Type \u00a77/post l\u00e6s\u00a7f for at se din post.

View File

@@ -2,371 +2,377 @@
# Single quotes have to be doubled: '' # Single quotes have to be doubled: ''
# Translations start here # Translations start here
# by: # by:
addedToAccount = \u00a7a{0} wurden zu deiner Geldb\u00f6rse hinzugef\u00fcgt. action=* {0} {1}
addedToOthersAccount = \u00a7a{0} wurden zu {1}s Konto hinzugef\u00fcgt. addedToAccount=\u00a7a{0} wurden zu deiner Geldb\u00f6rse hinzugef\u00fcgt.
alertBroke = zerst\u00f6rt: addedToOthersAccount=\u00a7a{0} wurden zu {1}s Konto hinzugef\u00fcgt.
alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} bei: {3} alertBroke=zerst\u00f6rt:
alertPlaced = platziert: alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} bei: {3}
alertUsed = benutzt: alertPlaced=platziert:
autoAfkKickReason = Du wurdest gekickt, weil du f\u00fcr {0} Minuten inaktiv warst. alertUsed=benutzt:
backAfterDeath = \u00a77Benutze den Befehl /back um zu deinem Todespunkt zur\u00fcck zu kehren. autoAfkKickReason=Du wurdest gekickt, weil du f\u00fcr {0} Minuten inaktiv warst.
backUsageMsg = \u00a77Kehre zur letzten Position zur\u00fcck. backAfterDeath=\u00a77Benutze den Befehl /back um zu deinem Todespunkt zur\u00fcck zu kehren.
backupFinished = Backup beendet backUsageMsg=\u00a77Kehre zur letzten Position zur\u00fcck.
backupStarted = Backup gestartet backupFinished=Backup beendet
balance = \u00a77Geldb\u00f6rse: {0} backupStarted=Backup gestartet
balanceTop = \u00a77 Top {0} Guthaben balance=\u00a77Geldb\u00f6rse: {0}
banExempt = \u00a7cDu kannst diesen Spieler nicht sperren. balanceTop=\u00a77 Top {0} Guthaben
banIpAddress = \u00a77IP-Adresse gesperrt. banExempt=\u00a7cDu kannst diesen Spieler nicht sperren.
bannedIpsFileError = Fehler beim Lesen von banned-ips.txt banIpAddress=\u00a77IP-Adresse gesperrt.
bannedIpsFileNotFound = banned-ips.txt nicht gefunden bannedIpsFileError=Fehler beim Lesen von banned-ips.txt
bannedPlayersFileError = Fehler beim Lesen von banned-players.txt bannedIpsFileNotFound=banned-ips.txt nicht gefunden
bannedPlayersFileNotFound = banned-players.txt nicht gefunden bannedPlayersFileError=Fehler beim Lesen von banned-players.txt
bigTreeFailure = \u00a7cFehler beim Pflanzen eines grossen Baums. Versuch es auf Gras oder Dreck. bannedPlayersFileNotFound=banned-players.txt nicht gefunden
bigTreeSuccess = \u00a77Grosser Baum gepflanzt. bigTreeFailure=\u00a7cFehler beim Pflanzen eines grossen Baums. Versuch es auf Gras oder Dreck.
broadcast = [\u00a7cRundruf\u00a7f]\u00a7a {0} bigTreeSuccess= \u00a77Grosser Baum gepflanzt.
buildAlert = \u00a7cDu hast keine Rechte zum Bauen. broadcast=[\u00a7cRundruf\u00a7f]\u00a7a {0}
bukkitFormatChanged = Bukkit-Versionsformat hat sich ge\u00e4ndert. Version nicht kontrolliert. buildAlert=\u00a7cDu hast keine Rechte zum Bauen.
burnMsg = \u00a77Du hast {0} f\u00fcr {1} Sekunden in Flammen gesetzt. bukkitFormatChanged=Bukkit-Versionsformat hat sich ge\u00e4ndert. Version nicht kontrolliert.
canTalkAgain = \u00a77Du kannst wieder sprechen. burnMsg=\u00a77Du hast {0} f\u00fcr {1} Sekunden in Flammen gesetzt.
cantFindGeoIpDB = Kann GeoIP-Datenbank nicht finden! canTalkAgain=\u00a77Du kannst wieder sprechen.
cantReadGeoIpDB = Fehler beim Einlesen der GeoIP-Datenbank! cantFindGeoIpDB=Kann GeoIP-Datenbank nicht finden!
cantSpawnItem = \u00a7cDu darfst {0} nicht erzeugen. cantReadGeoIpDB=Fehler beim Einlesen der GeoIP-Datenbank!
commandFailed = Befehl {0} scheiterte: cantSpawnItem=\u00a7cDu darfst {0} nicht erzeugen.
commandHelpFailedForPlugin=Fehler beim Abrufen der Hilfe f\u00fcr: {0} commandFailed=Befehl {0} scheiterte:
commandNotLoaded = \u00a7cBefehl {0} ist nicht richtig geladen. commandHelpFailedForPlugin=Fehler beim Abrufen der Hilfe f\u00fcr: {0}
compassBearing = \u00a77Peilung: {0} ({1} Grad). commandNotLoaded=\u00a7cBefehl {0} ist nicht richtig geladen.
configFileMoveError = Verschieben von config.yml in den Sicherheitskopien-Ordner gescheitert. compassBearing=\u00a77Peilung: {0} ({1} Grad).
configFileRenameError = Verschieben einer tempor\u00e4ren Datei nach config.yml gescheitert. configFileMoveError=Verschieben von config.yml in den Sicherheitskopien-Ordner gescheitert.
connectedPlayers = Verbundene Spieler: configFileRenameError=Verschieben einer tempor\u00e4ren Datei nach config.yml gescheitert.
connectionFailed = Fehler beim Verbindungsaufbau. connectedPlayers=Verbundene Spieler:
cooldownWithMessage = \u00a7cBeschr\u00e4nkung: {0} connectionFailed=Fehler beim Verbindungsaufbau.
corruptNodeInConfig = \u00a74Hinweis: Deine Konfigurationsdatei hat einen ung\u00fcltigen Knoten {0}. cooldownWithMessage=\u00a7cBeschr\u00e4nkung: {0}
couldNotFindTemplate = Vorlage {0} konnte nicht gefunden werden. corruptNodeInConfig=\u00a74Hinweis: Deine Konfigurationsdatei hat einen ung\u00fcltigen Knoten {0}.
creatingConfigFromTemplate = Erstelle Konfiguration aus Vorlage: {0} couldNotFindTemplate=Vorlage {0} konnte nicht gefunden werden.
creatingEmptyConfig = Erstelle leere Konfiguration: {0} creatingConfigFromTemplate=Erstelle Konfiguration aus Vorlage: {0}
creatingPortal = Erzeuge Portal bei {0},{1},{2}. creatingEmptyConfig=Erstelle leere Konfiguration: {0}
day = Tag creative=creative
days = Tage day=Tag
defaultBanReason = Der Bann-Hammer hat gesprochen! days=Tage
deleteFileError = Konnte Datei nicht l\u00f6schen: {0} defaultBanReason=Der Bann-Hammer hat gesprochen!
deleteHome = \u00a77Zuhause {0} wurde gel\u00f6scht. deleteFileError=Konnte Datei nicht l\u00f6schen: {0}
deleteJail = \u00a77Gef\u00e4ngnis {0} wurde gel\u00f6scht. deleteHome=\u00a77Zuhause {0} wurde gel\u00f6scht.
deleteWarp = \u00a77Warp-Punkt {0} wurde gel\u00f6scht. deleteJail=\u00a77Gef\u00e4ngnis {0} wurde gel\u00f6scht.
deniedAccessCommand = {0} hat keinen Zugriff auf diesen Befehl. deleteWarp=\u00a77Warp-Punkt {0} wurde gel\u00f6scht.
dependancyDownloaded = [Essentials] Abh\u00e4ngigkeit {0} erfolgreich runtergeladen. deniedAccessCommand={0} hat keinen Zugriff auf diesen Befehl.
dependancyException = [Essentials] W\u00e4hrend dem Download von einer Abh\u00e4ngigkeit ist ein Fehler aufgetreten. dependancyDownloaded=[Essentials] Abh\u00e4ngigkeit {0} erfolgreich runtergeladen.
dependancyNotFound = [Essentials] Eine erforderliche Abh\u00e4ngigkeit wurde nicht gefunde, Download startet jetzt.. dependancyException=[Essentials] W\u00e4hrend dem Download von einer Abh\u00e4ngigkeit ist ein Fehler aufgetreten.
depth = \u00a77Du bist auf Meeresh\u00f6he. dependancyNotFound=[Essentials] Eine erforderliche Abh\u00e4ngigkeit wurde nicht gefunde, Download startet jetzt..
depthAboveSea = \u00a77Du bist {0} Bl\u00f6cke \u00fcber Meeresh\u00f6he. depth=\u00a77Du bist auf Meeresh\u00f6he.
depthBelowSea = \u00a77Du bist {0} Bl\u00f6cke unter Meeresh\u00f6he. depthAboveSea=\u00a77Du bist {0} Bl\u00f6cke \u00fcber Meeresh\u00f6he.
destinationNotSet = Ziel nicht gesetzt depthBelowSea=\u00a77Du bist {0} Bl\u00f6cke unter Meeresh\u00f6he.
disableUnlimited = \u00a77Deaktiviere unendliches Platzieren von {0} f\u00fcr {1}. destinationNotSet=Ziel nicht gesetzt
disabled = deaktiviert disableUnlimited=\u00a77Deaktiviere unendliches Platzieren von {0} f\u00fcr {1}.
dontMoveMessage = \u00a77Teleportvorgang startet in {0}. Beweg dich nicht. disabled=deaktiviert
downloadingGeoIp = Lade GeoIP-Datenbank ... dies kann etwas dauern (country: 0.6 MB, city: 20MB) dontMoveMessage=\u00a77Teleportvorgang startet in {0}. Beweg dich nicht.
duplicatedUserdata = Doppelte Datei in userdata: {0} und {1} downloadingGeoIp=Lade GeoIP-Datenbank ... dies kann etwas dauern (country: 0.6 MB, city: 20MB)
enableUnlimited = \u00a77Gebe {1} unendliche Mengen von {0}. duplicatedUserdata=Doppelte Datei in userdata: {0} und {1}
enabled = aktiviert enableUnlimited=\u00a77Gebe {1} unendliche Mengen von {0}.
errorCallingCommand = Fehler beim Aufrufen des Befehls /{0} enabled=aktiviert
errorWithMessage = \u00a7cFehler: {0} errorCallingCommand=Fehler beim Aufrufen des Befehls /{0}
essentialsReload = \u00a77Essentials neu geladen {0} errorWithMessage=\u00a7cFehler: {0}
extinguish = \u00a77Du hast dich selbst gel\u00f6scht. essentialsReload=\u00a77Essentials neu geladen {0}
extinguishOthers = \u00a77Du hast {0} gel\u00f6scht. extinguish=\u00a77Du hast dich selbst gel\u00f6scht.
failedToCloseConfig = Fehler beim Schliessen der Konfiguration {0} extinguishOthers=\u00a77Du hast {0} gel\u00f6scht.
failedToCreateConfig = Fehler beim Erstellen der Konfiguration {0} failedToCloseConfig=Fehler beim Schliessen der Konfiguration {0}
failedToWriteConfig = Fehler beim Schreiben der Konfiguration {0} failedToCreateConfig=Fehler beim Erstellen der Konfiguration {0}
fileRenameError = Umbenennen von {0} gescheitert. failedToWriteConfig=Fehler beim Schreiben der Konfiguration {0}
foreverAlone = \u00a7cDu hast niemanden, dem du antworten kannst. false=false
freedMemory = {0} MB frei gemacht. fileRenameError=Umbenennen von {0} gescheitert.
gcchunks = Chunks, foreverAlone=\u00a7cDu hast niemanden, dem du antworten kannst.
gcentities = Einheiten freedMemory={0} MB frei gemacht.
gcfree = Freier Speicher: {0} MB gameMode=\u00a77Set game mode {0} for {1}.
gcmax = Maximaler Speicher: {0} MB gcchunks= Chunks,
gctotal = Reservierter Speicher: {0} MB gcentities= Einheiten
generatingPortal = \u00a77Erstelle ein Ausgangsportal. gcfree=Freier Speicher: {0} MB
geoIpUrlEmpty = GeoIP Download-URL ist leer. gcmax=Maximaler Speicher: {0} MB
geoIpUrlInvalid = GeoIP Download-URL ist ung\u00fcltig. gctotal=Reservierter Speicher: {0} MB
geoipJoinFormat = Spieler {0} kommt aus {1} geoIpUrlEmpty=GeoIP Download-URL ist leer.
godDisabledFor = deaktiviert f\u00fcr {0} geoIpUrlInvalid=GeoIP Download-URL ist ung\u00fcltig.
godEnabledFor = aktiviert f\u00fcr {0} geoipJoinFormat=Spieler {0} kommt aus {1}
godMode = \u00a77Unsterblichkeit {0}. godDisabledFor=deaktiviert f\u00fcr {0}
haveBeenReleased = \u00a77Du wurdest frei gelassen. godEnabledFor=aktiviert f\u00fcr {0}
heal = \u00a77Du wurdest geheilt. godMode=\u00a77Unsterblichkeit {0}.
healOther = \u00a77{0} geheilt. haveBeenReleased=\u00a77Du wurdest frei gelassen.
helpConsole = Um die Hilfe der Konsole zu sehen, schreibe ?. heal=\u00a77Du wurdest geheilt.
helpOp = \u00a7c[Hilfe]\u00a7f \u00a77{0}:\u00a7f {1} healOther=\u00a77{0} geheilt.
helpPages = Seite \u00a7c{0}\u00a7f von \u00a7c{1}\u00a7f: helpConsole=Um die Hilfe der Konsole zu sehen, schreibe ?.
holeInFloor = Loch im Boden helpOp=\u00a7c[Hilfe]\u00a7f \u00a77{0}:\u00a7f {1}
homeSet = \u00a77Zuhause gesetzt. helpPages=Seite \u00a7c{0}\u00a7f von \u00a7c{1}\u00a7f:
homeSetToBed = \u00a77Dein Zuhause ist nun an diesem Bett. holeInFloor=Loch im Boden
homes = Heime: {0} homeSet=\u00a77Zuhause gesetzt.
hour = Stunde homeSetToBed=\u00a77Dein Zuhause ist nun an diesem Bett.
hours = Stunden homes=Heime: {0}
ignorePlayer = Du ignorierst ab jetzt Spieler {0}. hour=Stunde
illegalDate = Ung\u00fcltiges Datumsformat. hours=Stunden
infoChapter = W\u00e4hle Kapitel: ignorePlayer=Du ignorierst ab jetzt Spieler {0}.
infoChapterPages = Kapitel {0}, Seite \u00a7c{1}\u00a7f von \u00a7c{2}\u00a7f: illegalDate=Ung\u00fcltiges Datumsformat.
infoFileDoesNotExist = Datei info.txt existiert nicht. Erzeuge eine neue Datei. infoChapter=W\u00e4hle Kapitel:
infoPages = Seite \u00a7c{0}\u00a7f von \u00a7c{1}\u00a7f: infoChapterPages=Kapitel {0}, Seite \u00a7c{1}\u00a7f von \u00a7c{2}\u00a7f:
infoUnknownChapter = Unbekanntes Kapitel: infoFileDoesNotExist=Datei info.txt existiert nicht. Erzeuge eine neue Datei.
invBigger = Das andere Inventar ist gr\u00f6sser als deins. infoPages=Seite \u00a7c{0}\u00a7f von \u00a7c{1}\u00a7f:
invRestored = Dein Inventar wurde wieder hergestellt. infoUnknownChapter=Unbekanntes Kapitel:
invSee = Du siehst das Inventar von {0}. invBigger=Das andere Inventar ist gr\u00f6sser als deins.
invSeeHelp = Benutze /invsee um dein Inventar wiederherzustellen. invRestored=Dein Inventar wurde wieder hergestellt.
invalidCharge = \u00a7cUng\u00fcltige Verf\u00fcgung. invSee=Du siehst das Inventar von {0}.
invalidMob = Ung\u00fcltiger Monstername. invSeeHelp=Benutze /invsee um dein Inventar wiederherzustellen.
invalidServer = Ung\u00fcltiger Server! invalidCharge=\u00a7cUng\u00fcltige Verf\u00fcgung.
invalidSignLine = Die Zeile {0} auf dem Schild ist falsch. invalidMob=Ung\u00fcltiger Monstername.
invalidWorld = \u00a7cUng\u00fcltige Welt. invalidServer=Ung\u00fcltiger Server!
inventoryCleared = \u00a77Inventar geleert. invalidSignLine=Die Zeile {0} auf dem Schild ist falsch.
inventoryClearedOthers = \u00a77Inventar von \u00a7c{0}\u00a77 geleert. invalidWorld=\u00a7cUng\u00fcltige Welt.
is = ist inventoryCleared=\u00a77Inventar geleert.
itemCannotBeSold = Dieser Gegenstand kann nicht verkauft werden. inventoryClearedOthers=\u00a77Inventar von \u00a7c{0}\u00a77 geleert.
itemMustBeStacked = Gegenstand muss als Stapel verkauft werden. Eine Anzahl von 2s verkauft 2 Stapel usw. is=ist
itemNotEnough1 = \u00a7cDu hast nicht genug Gegenst\u00e4nde zum Verkaufen. itemCannotBeSold=Dieser Gegenstand kann nicht verkauft werden.
itemNotEnough2 = \u00a77Wenn du alles verkaufen willst, nutze /sell itemname itemMustBeStacked=Gegenstand muss als Stapel verkauft werden. Eine Anzahl von 2s verkauft 2 Stapel usw.
itemNotEnough3 = \u00a77/sell itemname -1 verkauft alles bis auf eins usw. itemNotEnough1=\u00a7cDu hast nicht genug Gegenst\u00e4nde zum Verkaufen.
itemSellAir = Du versuchst Luft zu verkaufen? Nimm einen Gegenstand in die Hand. itemNotEnough2=\u00a77Wenn du alles verkaufen willst, nutze /sell itemname
itemSold = \u00a77Verkauft f\u00fcr \u00a7c{0}\u00a77 ({1} Einheiten je {2}) itemNotEnough3=\u00a77/sell itemname -1 verkauft alles bis auf eins usw.
itemSoldConsole = {0} verkauft {1} f\u00fcr \u00a77{2}\u00a77 ({3} Einheiten je {4}) itemSellAir=Du versuchst Luft zu verkaufen? Nimm einen Gegenstand in die Hand.
itemSpawn = \u00a77Gebe {0}x {1} itemSold=\u00a77Verkauft f\u00fcr \u00a7c{0}\u00a77 ({1} {2} Einheiten je {3})
itemsCsvNotLoaded = Konnte items.csv nicht laden. itemSoldConsole={0} verkauft {1} f\u00fcr \u00a77{2}\u00a77 ({3} Einheiten je {4})
jailAlreadyIncarcerated = \u00a7cPerson is already in jail: {0} itemSpawn=\u00a77Gebe {0}x {1}
jailMessage = \u00a7cDu hast ein Verbrechen begangen, also hast du Zeit. itemsCsvNotLoaded=Konnte items.csv nicht laden.
jailNotExist = Dieses Gef\u00e4ngnis existiert nicht. jailAlreadyIncarcerated=\u00a7cPerson is already in jail: {0}
jailReleased = \u00a77Spieler \u00a7e{0}\u00a77 wurde freigelassen. jailMessage=\u00a7cDu hast ein Verbrechen begangen, also hast du Zeit.
jailReleasedPlayerNotify = \u00a77Du wurdest freigelassen! jailNotExist=Dieses Gef\u00e4ngnis existiert nicht.
jailSentenceExtended = Gef\u00e4ngnisszeit erweitert auf: {0) jailReleased=\u00a77Spieler \u00a7e{0}\u00a77 wurde freigelassen.
jailSet = \u00a77Gef\u00e4ngnis {0} wurde erstellt. jailReleasedPlayerNotify=\u00a77Du wurdest freigelassen!
jumpError = Das w\u00fcrde deinen Computer \u00fcberlasten. jailSentenceExtended=Gef\u00e4ngnisszeit erweitert auf: {0)
kickDefault = Vom Server geworfen jailSet=\u00a77Gef\u00e4ngnis {0} wurde erstellt.
kickExempt = \u00a7cDu kannst diesen Spieler nicht rauswerfen. jumpError=Das w\u00fcrde deinen Computer \u00fcberlasten.
kill = \u00a77{0} get\u00f6tet. kickDefault=Vom Server geworfen
kitError = \u00a7cEs gibt keine g\u00fcltigen Ausr\u00fcstungen. kickExempt=\u00a7cDu kannst diesen Spieler nicht rauswerfen.
kitError2 = \u00a7cDiese Ausr\u00fcstung existiert nicht oder ist ung\u00fcltig. kill=\u00a77{0} get\u00f6tet.
kitErrorHelp = \u00a7cEventuell fehlt bei einem Gegenstand die Menge? kitError=\u00a7cEs gibt keine g\u00fcltigen Ausr\u00fcstungen.
kitGive = \u00a77Gebe Ausr\u00fcstung {0}. kitError2=\u00a7cDiese Ausr\u00fcstung existiert nicht oder ist ung\u00fcltig.
kitInvFull = \u00a7cDein Inventar ist voll, lege Ausr\u00fcstung auf den Boden kitErrorHelp=\u00a7cEventuell fehlt bei einem Gegenstand die Menge?
kitTimed = \u00a7cDu kannst diese Ausr\u00fcstung nicht innerhalb von {0} anfordern. kitGive=\u00a77Gebe Ausr\u00fcstung {0}.
kits = \u00a77Ausr\u00fcstungen: {0} kitInvFull=\u00a7cDein Inventar ist voll, lege Ausr\u00fcstung auf den Boden
lightningSmited = \u00a77Du wurdest gepeinigt. kitTimed=\u00a7cDu kannst diese Ausr\u00fcstung nicht innerhalb von {0} anfordern.
lightningUse = \u00a77Peinige {0} kits=\u00a77Ausr\u00fcstungen: {0}
loadWarpError = Fehler beim Laden von Warp-Punkt {0} lightningSmited=\u00a77Du wurdest gepeinigt.
loadinfo = Plugin {0} Version {1} geladen, erstellt von {2}, \u00fcbersetzt von snowleo lightningUse=\u00a77Peinige {0}
localFormat = Lokal: <{0}> {1} loadWarpError=Fehler beim Laden von Warp-Punkt {0}
mailClear = \u00a7cUm deine Nachrichten zu l\u00f6schen, schreibe /mail clear loadinfo=Plugin {0} Version {1} geladen, erstellt von {2}, \u00fcbersetzt von snowleo
mailCleared = \u00a77Nachrichten gel\u00f6scht! localFormat=Lokal: <{0}> {1}
mailSent = \u00a77Nachricht gesendet! mailClear=\u00a7cUm deine Nachrichten zu l\u00f6schen, schreibe /mail clear
markMailAsRead = \u00a7cUm deine Nachrichten zu l\u00f6schen, schreibe /mail clear mailCleared=\u00a77Nachrichten gel\u00f6scht!
markedAsAway = \u00a77Du wirst als abwesend angezeigt. mailSent=\u00a77Nachricht gesendet!
markedAsNotAway = \u00a77Du wirst nicht mehr als abwesend angezeigt. markMailAsRead=\u00a7cUm deine Nachrichten zu l\u00f6schen, schreibe /mail clear
maxHomes = Du kannst nicht mehr als {0} Zuhause setzen. markedAsAway=\u00a77Du wirst als abwesend angezeigt.
mayNotJail = \u00a7cDu kannst diese Person nicht einsperren. markedAsNotAway=\u00a77Du wirst nicht mehr als abwesend angezeigt.
me = mir maxHomes=Du kannst nicht mehr als {0} Zuhause setzen.
minute = Minute mayNotJail=\u00a7cDu kannst diese Person nicht einsperren.
minutes = Minuten me=mir
missingItems = Du ben\u00f6tigst {0}x {1}. minute=Minute
missingPrefixSuffix = Prefix/Suffix fehlt f\u00fcr {0} minutes=Minuten
mobSpawnError = Fehler beim \u00e4ndern des Monster-Spawner. missingItems=Du ben\u00f6tigst {0}x {1}.
mobSpawnLimit = Anzahl an Monster auf Serverlimit beschr\u00e4nkt missingPrefixSuffix=Prefix/Suffix fehlt f\u00fcr {0}
mobSpawnTarget = Zielblock, muss ein Monster-Spawner sein. mobSpawnError=Fehler beim \u00e4ndern des Monster-Spawner.
moneyRecievedFrom = \u00a7a{1} hat dir {0} gegeben. mobSpawnLimit=Anzahl an Monster auf Serverlimit beschr\u00e4nkt
moneySentTo = \u00a7aDu hast {1} {0} gegeben. mobSpawnTarget=Zielblock, muss ein Monster-Spawner sein.
moneyTaken = {0} wurde aus deiner Geldb\u00f6rse genommen. mobsAvailable=\u00a77Mobs: {0}
month = Monat moneyRecievedFrom=\u00a7a{1} hat dir {0} gegeben.
months = Monate moneySentTo=\u00a7aDu hast {1} {0} gegeben.
moreThanZero = Anzahl muss gr\u00f6sser als 0 sein. moneyTaken={0} wurde aus deiner Geldb\u00f6rse genommen.
msgFormat = \u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2} month=Monat
muteExempt = \u00a7cDu darfst diesen Spieler nicht stumm machen. months=Monate
mutedPlayer = Player {0} ist nun stumm. moreThanZero=Anzahl muss gr\u00f6sser als 0 sein.
mutedPlayerFor = Player {0} ist nun stumm f\u00fcr {1}. msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
mutedUserSpeaks = {0} versuchte zu sprechen, aber ist stumm geschaltet. muteExempt=\u00a7cDu darfst diesen Spieler nicht stumm machen.
needTpohere = Du brauchst Zugriff auf /tpohere um andere Spieler teleportieren zu k\u00f6nnen. mutedPlayer=Player {0} ist nun stumm.
negativeBalanceError = Spieler darf keine Schulden machen. mutedPlayerFor=Player {0} ist nun stumm f\u00fcr {1}.
nickChanged = Nickname ge\u00e4ndert. mutedUserSpeaks={0} versuchte zu sprechen, aber ist stumm geschaltet.
needTpohere=Du brauchst Zugriff auf /tpohere um andere Spieler teleportieren zu k\u00f6nnen.
negativeBalanceError=Spieler darf keine Schulden machen.
nickChanged=Nickname ge\u00e4ndert.
nickDisplayName=\u00a77Du musst \u00a7fchange-displayname\u00a7c in der Essentials-Config aktivieren. nickDisplayName=\u00a77Du musst \u00a7fchange-displayname\u00a7c in der Essentials-Config aktivieren.
nickInUse = \u00a7cDieser Name wird bereits verwendet. nickInUse=\u00a7cDieser Name wird bereits verwendet.
nickNamesAlpha = \u00a7cNicknamen d\u00fcrfen nur alphanumerische Zeichen enthalten. nickNamesAlpha=\u00a7cNicknamen d\u00fcrfen nur alphanumerische Zeichen enthalten.
nickNoMore = \u00a7Du hast keinen Nicknamen mehr. nickNoMore=\u00a7Du hast keinen Nicknamen mehr.
nickOthersPermission = \u00a7cDu hast keine Rechte um den Nicknamen von anderen zu \u00e4ndern. nickOthersPermission=\u00a7cDu hast keine Rechte um den Nicknamen von anderen zu \u00e4ndern.
nickSet = \u00a77Dein Nickname ist nun \u00a7c{0} nickSet=\u00a77Dein Nickname ist nun \u00a7c{0}
noAccessCommand = \u00a7cDu hast keinen Zugriff auf diesen Befehl. noAccessCommand=\u00a7cDu hast keinen Zugriff auf diesen Befehl.
noAccessPermission = \u00a7cDu hast keine Rechte, den Block {0} zu \u00f6ffnen. noAccessPermission=\u00a7cDu hast keine Rechte, den Block {0} zu \u00f6ffnen.
noDestroyPermission = \u00a7cDu hast keine Rechte, den Block {0} zu zerst\u00f6ren. noDestroyPermission=\u00a7cDu hast keine Rechte, den Block {0} zu zerst\u00f6ren.
noHelpFound = \u00a7cKeine \u00fcbereinstimmenden Kommandos. noHelpFound=\u00a7cKeine \u00fcbereinstimmenden Kommandos.
noHomeSet = Du hast kein Zuhause gesetzt. noHomeSet=Du hast kein Zuhause gesetzt.
noHomeSetPlayer = Spieler hat kein Zuhause gesetzt. noHomeSetPlayer=Spieler hat kein Zuhause gesetzt.
noKitPermission = \u00a7cDu brauchst die Berechtigung \u00a7c{0}\u00a7c um diese Ausr\u00fcstung anzufordern. noKitPermission=\u00a7cDu brauchst die Berechtigung \u00a7c{0}\u00a7c um diese Ausr\u00fcstung anzufordern.
noKits = \u00a77Es sind keine Ausr\u00fcstungen verf\u00fcgbar. noKits=\u00a77Es sind keine Ausr\u00fcstungen verf\u00fcgbar.
noMail = Du hast keine Nachrichten noMail=Du hast keine Nachrichten
noMailSendPerm = \u00a7cDu hast die Rechte \u00a7fessentials.mail.send\u00a7c nicht. noMailSendPerm=\u00a7cDu hast die Rechte \u00a7fessentials.mail.send\u00a7c nicht.
noMotd = \u00a7cEs existiert keine Willkommensnachricht. noMotd=\u00a7cEs existiert keine Willkommensnachricht.
noNewMail = \u00a77Du hast keine Nachrichten. noNewMail=\u00a77Du hast keine Nachrichten.
noPendingRequest = Du hast keine Teleportierungsanfragen. noPendingRequest=Du hast keine Teleportierungsanfragen.
noPlacePermission = \u00a7cDu hast keine Rechte, einen Block in der N\u00e4he des Schildes zu platzieren. noPlacePermission=\u00a7cDu hast keine Rechte, einen Block in der N\u00e4he des Schildes zu platzieren.
noPowerTools = Du hast keine Powertools zugewiesen. noPowerTools=Du hast keine Powertools zugewiesen.
noRules = \u00a7cEs wurden keine Regeln definiert. noRules=\u00a7cEs wurden keine Regeln definiert.
noWarpsDefined = Keine Warp-Punkte erstellt. noWarpsDefined=Keine Warp-Punkte erstellt.
none = keine none=keine
notAllowedToQuestion = \u00a7cDu bist nicht berechtigt zu fragen. notAllowedToQuestion=\u00a7cDu bist nicht berechtigt zu fragen.
notAllowedToShout = \u00a7cDu bist nicht berechtigt zu schreien. notAllowedToShout=\u00a7cDu bist nicht berechtigt zu schreien.
notEnoughMoney = Du hast nicht genug Geld. notEnoughMoney=Du hast nicht genug Geld.
notRecommendedBukkit = Die verwendete Bukkit-Version ist nicht f\u00fcr Essentials empfohlen. notRecommendedBukkit=Die verwendete Bukkit-Version ist nicht f\u00fcr Essentials empfohlen.
notSupportedYet = Noch nicht verf\u00fcgbar. notSupportedYet=Noch nicht verf\u00fcgbar.
now = jetzt now=jetzt
numberRequired = Ein Zahl wird ben\u00f6tigt. numberRequired=Ein Zahl wird ben\u00f6tigt.
onlyDayNight = /time unterst\u00fctzt nur day und night. onlyDayNight=/time unterst\u00fctzt nur day und night.
onlyPlayers = Nur Spieler k\u00f6nnen {0} benutzen. onlyPlayers=Nur Spieler k\u00f6nnen {0} benutzen.
onlySunStorm = /weather unterst\u00fctzt nur sun und storm. onlySunStorm=/weather unterst\u00fctzt nur sun und storm.
pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
pTimeCurrentFixed = \u00a7e{0}''s\u00a7f Zeit wurde zu {1} gesetzt. pTimeCurrentFixed=\u00a7e{0}''s\u00a7f Zeit wurde zu {1} gesetzt.
pTimeNormal = \u00a7e{0}''s\u00a7f Zeit ist normal und entspricht der Serverzeit. pTimeNormal=\u00a7e{0}''s\u00a7f Zeit ist normal und entspricht der Serverzeit.
pTimeOthersPermission = \u00a7cDu hast keine Berechtigung die Zeit von anderen Spielern zu \u00e4ndern. pTimeOthersPermission=\u00a7cDu hast keine Berechtigung die Zeit von anderen Spielern zu \u00e4ndern.
pTimePlayers = Diese Spieler haben ihre eigene Zeit: pTimePlayers=Diese Spieler haben ihre eigene Zeit:
pTimeReset = Zeit wurde zur\u00fcgesetzt f\u00fcr: \u00a7e{0} pTimeReset=Zeit wurde zur\u00fcgesetzt f\u00fcr: \u00a7e{0}
pTimeSet = Zeit wurde f\u00fcr \u00a7e{1}\u00a7f zu \u00a73{0}\u00a7f gesetzt. pTimeSet=Zeit wurde f\u00fcr \u00a7e{1}\u00a7f zu \u00a73{0}\u00a7f gesetzt.
pTimeSetFixed = Spielerzeit ist festgesetzt zu \u00a73{0}\u00a7f f\u00fcr: \u00a7e{1} pTimeSetFixed=Spielerzeit ist festgesetzt zu \u00a73{0}\u00a7f f\u00fcr: \u00a7e{1}
parseError = Fehler beim Parsen von {0} in Zeile {1} parseError=Fehler beim Parsen von {0} in Zeile {1}
pendingTeleportCancelled = \u00a7cLaufende Teleportierung abgebrochen. pendingTeleportCancelled=\u00a7cLaufende Teleportierung abgebrochen.
permissionsError = Permissions/GroupManager fehlt; Chat-Prefixe/-Suffixe sind ausgeschaltet. permissionsError=Permissions/GroupManager fehlt; Chat-Prefixe/-Suffixe sind ausgeschaltet.
playerBanned = \u00a7cSpieler {0} gesperrt: {1} playerBanned=\u00a7cSpieler {0} gesperrt: {1}
playerInJail = \u00a7cSpieler ist bereits in Gef\u00e4ngnis {0}. playerInJail=\u00a7cSpieler ist bereits in Gef\u00e4ngnis {0}.
playerJailed = \u00a77Spieler {0} eingesperrt. playerJailed=\u00a77Spieler {0} eingesperrt.
playerJailedFor = \u00a77Spieler {0} eingesperrt f\u00fcr {1}. playerJailedFor= \u00a77Spieler {0} eingesperrt f\u00fcr {1}.
playerKicked = \u00a7cSpieler {0} rausgeworfen: {1} playerKicked=\u00a7cSpieler {0} rausgeworfen: {1}
playerMuted = \u00a77Du bist jetzt stumm. playerMuted=\u00a77Du bist jetzt stumm.
playerMutedFor = \u00a77Du bist jetzt stumm f\u00fcr {0}. playerMutedFor=\u00a77Du bist jetzt stumm f\u00fcr {0}.
playerNeverOnServer = \u00a7cSpieler {0} war niemals auf diesem Server. playerNeverOnServer=\u00a7cSpieler {0} war niemals auf diesem Server.
playerNotFound = \u00a7cSpieler nicht gefunden. playerNotFound=\u00a7cSpieler nicht gefunden.
playerUnmuted = \u00a77Du bist nicht mehr stumm. playerUnmuted=\u00a77Du bist nicht mehr stumm.
pong = Pong! pong=Pong!
possibleWorlds = \u00a77M\u00f6gliche Welten sind nummeriet von 0 bis {0}. possibleWorlds=\u00a77M\u00f6gliche Welten sind nummeriet von 0 bis {0}.
powerToolAir = Befehl kann nicht mit Luft verbunden werden. powerToolAir=Befehl kann nicht mit Luft verbunden werden.
powerToolAlreadySet = Befehl \u00a7c{0}\u00a7f ist bereits zu {1} hinzugef\u00fcgt. powerToolAlreadySet=Befehl \u00a7c{0}\u00a7f ist bereits zu {1} hinzugef\u00fcgt.
powerToolAttach = Befehl \u00a7c{0}\u00a7f erfolgreich zu {1} hinzugef\u00fcgt. powerToolAttach=Befehl \u00a7c{0}\u00a7f erfolgreich zu {1} hinzugef\u00fcgt.
powerToolClearAll= Alle Powertoolkommandos wurden entfernt. powerToolClearAll= Alle Powertoolkommandos wurden entfernt.
powerToolList = {1} hat die folgenden Befehle: \u00a7c{0}\u00a7f. powerToolList={1} hat die folgenden Befehle: \u00a7c{0}\u00a7f.
powerToolListEmpty = {0} hat keinen Befehl. powerToolListEmpty={0} hat keinen Befehl.
powerToolNoSuchCommandAssigned = Befehl \u00a7c{0}\u00a7f wurde nicht zu {1} hinzugef\u00fcgt. powerToolNoSuchCommandAssigned=Befehl \u00a7c{0}\u00a7f wurde nicht zu {1} hinzugef\u00fcgt.
powerToolRemove = Befehl \u00a7c{0}\u00a7f erfolgreich von {1} entfernt. powerToolRemove=Befehl \u00a7c{0}\u00a7f erfolgreich von {1} entfernt.
powerToolRemoveAll = Alle Befehle von {0} entfernt. powerToolRemoveAll=Alle Befehle von {0} entfernt.
powerToolsEnabled = Alle deine Powertools wurden aktiviert. powerToolsDisabled=Alle deine Powertools wurden deaktiviert.
powerToolsDisabled = Alle deine Powertools wurden deaktiviert. powerToolsEnabled=Alle deine Powertools wurden aktiviert.
protectionOwner = \u00a76[EssentialsProtect] Besitzer dieses Blocks: {0} protectionOwner=\u00a76[EssentialsProtect] Besitzer dieses Blocks: {0}
questionFormat = \u00a77[Frage]\u00a7f {0} questionFormat=\u00a77[Frage]\u00a7f {0}
reloadAllPlugins = \u00a77Alle plugins neu geladen. reloadAllPlugins=\u00a77Alle plugins neu geladen.
repair = Du hast erfolgreich deine {0} repariert. repair=Du hast erfolgreich deine {0} repariert.
repairAlreadyFixed = \u00a77Dieser Gegenstand ben\u00f6tigt keine Reparatur. repairAlreadyFixed=\u00a77Dieser Gegenstand ben\u00f6tigt keine Reparatur.
repairInvalidType = \u00a7cDieser Gegenstand kann nicht repariert werden. repairInvalidType=\u00a7cDieser Gegenstand kann nicht repariert werden.
repairNone = Es sind keine Gegenst\u00e4nde vorhanden, die repariert werden k\u00f6nnen. repairNone=Es sind keine Gegenst\u00e4nde vorhanden, die repariert werden k\u00f6nnen.
requestAccepted = \u00a77Teleportierungsanfrage akzeptiert. requestAccepted=\u00a77Teleportierungsanfrage akzeptiert.
requestAcceptedFrom = \u00a77{0} hat deine Teleportierungsanfrage angenommen. requestAcceptedFrom=\u00a77{0} hat deine Teleportierungsanfrage angenommen.
requestDenied = \u00a77Teleportierungsanfrage verweigert. requestDenied=\u00a77Teleportierungsanfrage verweigert.
requestDeniedFrom = \u00a77{0} hat deine Teleportierungsanfrage abgelehnt. requestDeniedFrom=\u00a77{0} hat deine Teleportierungsanfrage abgelehnt.
requestSent = \u00a77Anfrage gesendet an {0}\u00a77. requestSent=\u00a77Anfrage gesendet an {0}\u00a77.
returnPlayerToJailError = Fehler beim Versuch, den Spieler ins Gef\u00e4ngnis zu teleportieren. returnPlayerToJailError=Fehler beim Versuch, den Spieler ins Gef\u00e4ngnis zu teleportieren.
second = Sekunde second=Sekunde
seconds = Sekunden seconds=Sekunden
seenOffline = Spieler {0} ist offline seit {1} seenOffline=Spieler {0} ist offline seit {1}
seenOnline = Spieler {0} ist online seit {1} seenOnline=Spieler {0} ist online seit {1}
serverFull = Server ist voll serverFull=Server ist voll
setSpawner = \u00c4ndere Mob-Spawner zu {0} setSpawner=\u00c4ndere Mob-Spawner zu {0}
sheepMalformedColor = Ung\u00fcltige Farbe. sheepMalformedColor=Ung\u00fcltige Farbe.
shoutFormat = \u00a77[Schrei]\u00a7f {0} shoutFormat=\u00a77[Schrei]\u00a7f {0}
signFormatFail = \u00a74[{0}] signFormatFail=\u00a74[{0}]
signFormatSuccess = \u00a71[{0}] signFormatSuccess=\u00a71[{0}]
signFormatTemplate = [{0}] signFormatTemplate=[{0}]
signProtectInvalidLocation = \u00a74Du bist nicht befugt ein Schild hierhin zu setzen. signProtectInvalidLocation=\u00a74Du bist nicht befugt ein Schild hierhin zu setzen.
similarWarpExist = Ein Warp-Punkt mit einem \u00e4hnlichen Namen existiert bereits. similarWarpExist=Ein Warp-Punkt mit einem \u00e4hnlichen Namen existiert bereits.
slimeMalformedSize = Ung\u00fcltige Gr\u00f6sse. slimeMalformedSize=Ung\u00fcltige Gr\u00f6sse.
soloMob = Das Monster m\u00f6chte allein sein. soloMob=Das Monster m\u00f6chte allein sein.
spawnSet = \u00a77Spawn-Punkt gesetzt f\u00fcr Gruppe {0}. spawnSet=\u00a77Spawn-Punkt gesetzt f\u00fcr Gruppe {0}.
spawned = erzeugt spawned=erzeugt
suicideMessage = \u00a77Lebewohl grausame Welt... suicideMessage=\u00a77Lebewohl grausame Welt...
suicideSuccess = \u00a77{0} hat sich das Leben genommen. suicideSuccess= \u00a77{0} hat sich das Leben genommen.
takenFromAccount = \u00a7c{0} wurden aus deiner Geldb\u00f6rse genommen. survival=survival
takenFromOthersAccount = \u00a7c{0} wurde von {1} wurde Rechnung getragen. takenFromAccount=\u00a7c{0} wurden aus deiner Geldb\u00f6rse genommen.
teleportAAll = \u00a77Teleportierungsanfrage zu allen Spielern gesendet... takenFromOthersAccount=\u00a7c{0} wurde von {1} wurde Rechnung getragen.
teleportAll = \u00a77Teleportiere alle Spieler... teleportAAll=\u00a77Teleportierungsanfrage zu allen Spielern gesendet...
teleportAtoB = \u00a77{0}\u00a77 teleportiert dich zu {1}\u00a77. teleportAll=\u00a77Teleportiere alle Spieler...
teleportDisabled = {0} verweigert die Teleportierung. teleportAtoB=\u00a77{0}\u00a77 teleportiert dich zu {1}\u00a77.
teleportHereRequest = \u00a7c{0}\u00a7c fragt, ob du dich zu ihm teleportierst. teleportDisabled={0} verweigert die Teleportierung.
teleportNewPlayerError = Fehler beim Teleportieren eines neuen Spielers teleportHereRequest=\u00a7c{0}\u00a7c fragt, ob du dich zu ihm teleportierst.
teleportRequest = \u00a7c{0}\u00a7c fragt, ob er sich zu dir teleportieren darf. teleportNewPlayerError=Fehler beim Teleportieren eines neuen Spielers
teleportTop = \u00a77Teleportiere nach oben. teleportRequest=\u00a7c{0}\u00a7c fragt, ob er sich zu dir teleportieren darf.
teleportationCommencing = \u00a77Teleportierung gestartet... teleportTop=\u00a77Teleportiere nach oben.
teleportationDisabled = \u00a77Teleportierung deaktiviert. teleportationCommencing=\u00a77Teleportierung gestartet...
teleportationEnabled = \u00a77Teleportierung aktiviert. teleportationDisabled=\u00a77Teleportierung deaktiviert.
teleporting = \u00a77Teleportiere... teleportationEnabled=\u00a77Teleportierung aktiviert.
teleportingPortal = \u00a77Teleportiere durch Portal. teleporting=\u00a77Teleportiere...
tempBanned = Zeitlich gesperrt vom Server f\u00fcr {0} teleportingPortal=\u00a77Teleportiere durch Portal.
tempbanExempt = \u00a77Du kannst diesen Spieler nicht zeitlich sperren. tempBanned=Zeitlich gesperrt vom Server f\u00fcr {0}
thunder = Es donnert nun in deiner Welt {0}. tempbanExempt=\u00a77Du kannst diesen Spieler nicht zeitlich sperren.
thunderDuration = Es donnert nun f\u00fcr {1} Sekunden in deiner Welt {0}. thunder= Es donnert nun in deiner Welt {0}.
timeBeforeHeal = Zeit bis zur n\u00e4chsten Heilung: {0} thunderDuration=Es donnert nun f\u00fcr {1} Sekunden in deiner Welt {0}.
timeBeforeTeleport = Zeit bis zum n\u00e4chsten Teleport: {0} timeBeforeHeal=Zeit bis zur n\u00e4chsten Heilung: {0}
timeFormat = \u00a73{0}\u00a7f oder \u00a73{1}\u00a7f oder \u00a73{2}\u00a7f timeBeforeTeleport=Zeit bis zum n\u00e4chsten Teleport: {0}
timePattern = (?:([0-9]+)\\s*[yj][a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*[dt][a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:h|st)[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)? timeFormat=\u00a73{0}\u00a7f oder \u00a73{1}\u00a7f oder \u00a73{2}\u00a7f
timeSet = Zeit in allen Welten gesetzt. timePattern=(?:([0-9]+)\\s*[yj][a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*[dt][a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:h|st)[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)?
timeSetPermission = \u00a7cDu hast keine Berechtigung die Zeit zu \u00e4ndern. timeSet=Zeit in allen Welten gesetzt.
timeWorldCurrent = Die momentane Zeit in {0} ist \u00a73{1} timeSetPermission=\u00a7cDu hast keine Berechtigung die Zeit zu \u00e4ndern.
timeWorldSet = Die Zeit in \u00a7c{1}\u00a7f wurde zu {0} gesetzt. timeWorldCurrent=Die momentane Zeit in {0} ist \u00a73{1}
tradeCompleted = \u00a77Handel abgeschlossen. timeWorldSet=Die Zeit in \u00a7c{1}\u00a7f wurde zu {0} gesetzt.
tradeSignEmpty = Der Bestand des Trade-Schild ist aufgebraucht. tradeCompleted=\u00a77Handel abgeschlossen.
tradeSignEmptyOwner = Es gibt nichts mehr zu Sammeln von diesem Trade-Schild. tradeSignEmpty=Der Bestand des Trade-Schild ist aufgebraucht.
treeFailure = \u00a7cBaumpflanzung gescheitert. Versuche es auf Gras oder Dreck. tradeSignEmptyOwner=Es gibt nichts mehr zu Sammeln von diesem Trade-Schild.
treeSpawned = \u00a77Baum gepflanzt. treeFailure=\u00a7cBaumpflanzung gescheitert. Versuche es auf Gras oder Dreck.
typeTpaccept = \u00a77Um zu teleportieren, schreibe \u00a7c/tpaccept\u00a77. treeSpawned=\u00a77Baum gepflanzt.
typeTpdeny = \u00a77Um diese Anfrage abzulehnen, schreibe \u00a7c/tpdeny\u00a77. true=true
typeWorldName = \u00a77Du kannst auch den Namen der Welt eingeben. typeTpaccept=\u00a77Um zu teleportieren, schreibe \u00a7c/tpaccept\u00a77.
unableToSpawnMob = Fehler beim Erzeugen eines Monster. typeTpdeny=\u00a77Um diese Anfrage abzulehnen, schreibe \u00a7c/tpdeny\u00a77.
unbannedIP = Verbannung von IP-Adresse r\u00fcckg\u00e4ngig gemacht. typeWorldName=\u00a77Du kannst auch den Namen der Welt eingeben.
unbannedPlayer = Verbannung von Spieler r\u00fcckg\u00e4ngig gemacht. unableToSpawnMob=Fehler beim Erzeugen eines Monster.
unignorePlayer = Du ignorierst Spieler {0} nicht mehr. unbannedIP=Verbannung von IP-Adresse r\u00fcckg\u00e4ngig gemacht.
unknownItemId = Unbekannte Item-Id: {0} unbannedPlayer=Verbannung von Spieler r\u00fcckg\u00e4ngig gemacht.
unknownItemInList = Unbekannter Gegenstand {0} in Liste {1}. unignorePlayer=Du ignorierst Spieler {0} nicht mehr.
unknownItemName = Unbekannter Gegenstand: {0} unknownItemId=Unbekannte Item-Id: {0}
unlimitedItemPermission = \u00a7cDu hast keine Rechte f\u00fcr {0}. unknownItemInList=Unbekannter Gegenstand {0} in Liste {1}.
unlimitedItems = Unendliche Objekte: unknownItemName=Unbekannter Gegenstand: {0}
unmutedPlayer = Spieler {0} ist nicht mehr stumm. unlimitedItemPermission=\u00a7cDu hast keine Rechte f\u00fcr {0}.
upgradingFilesError = Fehler beim Aktualisieren der Dateien unlimitedItems=Unendliche Objekte:
userCreatedPortal = {0} benutzt ein Portal und hat ein Ausgangsportal erstellt. unmutedPlayer=Spieler {0} ist nicht mehr stumm.
userDoesNotExist = Spieler {0} existiert nicht. upgradingFilesError=Fehler beim Aktualisieren der Dateien
userIsAway = {0} ist abwesend. userDoesNotExist=Spieler {0} existiert nicht.
userIsNotAway = {0} ist wieder da. userIsAway={0} ist abwesend.
userJailed = \u00a77Du wurdest eingesperrt. userIsNotAway={0} ist wieder da.
userUsedPortal = {0} benutzt ein vorhandenes Ausgangsportal. userJailed=\u00a77Du wurdest eingesperrt.
userdataMoveBackError = Verschieben von userdata/{0}.tmp nach userdata/{1} gescheitert. userUsedPortal={0} benutzt ein vorhandenes Ausgangsportal.
userdataMoveError = Verschieben von userdata/{0} nach userdata/{1}.tmp gescheitert. userdataMoveBackError=Verschieben von userdata/{0}.tmp nach userdata/{1} gescheitert.
usingPortal = \u00a77Teleportiere durch Portal zum Ausgangsportal. userdataMoveError=Verschieben von userdata/{0} nach userdata/{1}.tmp gescheitert.
usingTempFolderForTesting = Benutze tempor\u00e4ren Ordner zum Testen: usingTempFolderForTesting=Benutze tempor\u00e4ren Ordner zum Testen:
versionMismatch = Versionen nicht identisch! Bitte aktualisiere {0}. versionMismatch=Versionen nicht identisch! Bitte aktualisiere {0}.
versionMismatchAll = Versionen ungleich! Bitte aktualisiere alle Essentials jars auf die gleiche Version. versionMismatchAll=Versionen ungleich! Bitte aktualisiere alle Essentials jars auf die gleiche Version.
voiceSilenced = \u00a77Du bist stumm voiceSilenced=\u00a77Du bist stumm
warpDeleteError = Fehler beim L\u00f6schen der Warp-Datei. warpDeleteError=Fehler beim L\u00f6schen der Warp-Datei.
warpListPermission = \u00a7cDu hast keine Berechtigung, die Warp-Punkte anzuzeigen. warpListPermission=\u00a7cDu hast keine Berechtigung, die Warp-Punkte anzuzeigen.
warpNotExist = Warp-Punkt existiert nicht. warpNotExist=Warp-Punkt existiert nicht.
warpSet = \u00a77Warp-Punkt {0} wurde erstellt. warpSet=\u00a77Warp-Punkt {0} wurde erstellt.
warpUsePermission = \u00a7cDu hast keinen Zugriff f\u00fcr diesen Warp-Punkt. warpUsePermission=\u00a7cDu hast keinen Zugriff f\u00fcr diesen Warp-Punkt.
warpingTo = \u00a77Teleportiere zu Warp-Punkt {0}. warpingTo=\u00a77Teleportiere zu Warp-Punkt {0}.
warpsCount = \u00a77Es gibt {0} Warp-Punkte. Zeige Seite {1} von {2}. warps=Warps: {0}
weatherStorm = \u00a77In {0} st\u00fcrmt es nun. warpsCount=\u00a77Es gibt {0} Warp-Punkte. Zeige Seite {1} von {2}.
weatherStormFor = \u00a77In {0} st\u00fcrmt es nun f\u00fcr {1} Sekunden. weatherStorm=\u00a77In {0} st\u00fcrmt es nun.
weatherSun = \u00a77In {0} scheint nun die Sonne. weatherStormFor=\u00a77In {0} st\u00fcrmt es nun f\u00fcr {1} Sekunden.
weatherSunFor = \u00a77In {0} scheint nun f\u00fcr {1} Sekunden die Sonne. weatherSun=\u00a77In {0} scheint nun die Sonne.
whoisGeoLocation = \u00a79 - Herkunft: {0} weatherSunFor=\u00a77In {0} scheint nun f\u00fcr {1} Sekunden die Sonne.
whoisHealth = \u00a79 - Gesundheit: {0}/20 whoisGamemode=\u00a79 - Gamemode: {0}
whoisIPAddress = \u00a79 - IP-Adresse: {0} whoisGeoLocation=\u00a79 - Herkunft: {0}
whoisIs = {0} ist {1} whoisGod=\u00a79 - God mode: {0}
whoisLocation = \u00a79 - Position: ({0}, {1}, {2}, {3}) whoisHealth=\u00a79 - Gesundheit: {0}/20
whoisMoney = \u00a79 - Geldb\u00f6rse: {0} whoisIPAddress=\u00a79 - IP-Adresse: {0}
whoisStatusAvailable = \u00a79 - Status: Anwesend whoisIs={0} ist {1}
whoisStatusAway = \u00a79 - Status: \u00a7cAbwesend\u00a7f whoisLocation=\u00a79 - Position: ({0}, {1}, {2}, {3})
worth = \u00a77Ein Stapel von {0} ist \u00a7c{1}\u00a77 wert ({2} Einheiten je {3}) whoisMoney=\u00a79 - Geldb\u00f6rse: {0}
worthMeta = \u00a77Ein Stapel von {0} mit Metadaten {1} ist \u00a7c{2}\u00a77 wert. ({3} Einheiten je {4}) whoisOP=\u00a79 - OP: {0}
worthSet = Wert des Gegenstands gesetzt. whoisStatusAvailable=\u00a79 - Status: Anwesend
year = Jahr whoisStatusAway=\u00a79 - Status: \u00a7cAbwesend\u00a7f
years = Jahre worth=\u00a77Ein Stapel von {0} ist \u00a7c{1}\u00a77 wert ({2} Einheiten je {3})
youAreHealed = \u00a77Du wurdest geheilt. worthMeta=\u00a77Ein Stapel von {0} mit Metadaten {1} ist \u00a7c{2}\u00a77 wert. ({3} Einheiten je {4})
youHaveNewMail = \u00a7cDu hast {0} Nachrichten!\u00a7f Schreibe \u00a77/mail read\u00a7f um deine Nachrichten anzuzeigen. worthSet=Wert des Gegenstands gesetzt.
year=Jahr
years=Jahre
youAreHealed=\u00a77Du wurdest geheilt.
youHaveNewMail=\u00a7cDu hast {0} Nachrichten!\u00a7f Schreibe \u00a77/mail read\u00a7f um deine Nachrichten anzuzeigen.

View File

@@ -2,372 +2,377 @@
# Single quotes have to be doubled: '' # Single quotes have to be doubled: ''
# Translations start here # Translations start here
# by: # by:
addedToAccount = \u00a7a{0} has been added to your account. action=* {0} {1}
addedToOthersAccount = \u00a7a{0} has been added to {1} account. addedToAccount=\u00a7a{0} has been added to your account.
alertBroke = broke: addedToOthersAccount=\u00a7a{0} has been added to {1} account.
alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3} alertBroke=broke:
alertPlaced = placed: alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3}
alertUsed = used: alertPlaced=placed:
alertUsed=used:
autoAfkKickReason=You have been kicked for idling more than {0} minutes. autoAfkKickReason=You have been kicked for idling more than {0} minutes.
backAfterDeath = \u00a77Use the /back command to return to your death point. backAfterDeath=\u00a77Use the /back command to return to your death point.
backUsageMsg = \u00a77Returning to previous location. backUsageMsg=\u00a77Returning to previous location.
backupFinished = Backup finished backupFinished=Backup finished
backupStarted = Backup started backupStarted=Backup started
balance = \u00a77Balance: {0} balance=\u00a77Balance: {0}
balanceTop = \u00a77 Top {0} balances balanceTop=\u00a77 Top {0} balances
banExempt = \u00a7cYou can not ban that player. banExempt=\u00a7cYou can not ban that player.
banIpAddress = \u00a77Banned IP address banIpAddress=\u00a77Banned IP address
bannedIpsFileError = Error reading banned-ips.txt bannedIpsFileError=Error reading banned-ips.txt
bannedIpsFileNotFound = banned-ips.txt not found bannedIpsFileNotFound=banned-ips.txt not found
bannedPlayersFileError = Error reading banned-players.txt bannedPlayersFileError=Error reading banned-players.txt
bannedPlayersFileNotFound = banned-players.txt not found bannedPlayersFileNotFound=banned-players.txt not found
bigTreeFailure = \u00a7cBig tree generation failure. Try again on grass or dirt. bigTreeFailure=\u00a7cBig tree generation failure. Try again on grass or dirt.
bigTreeSuccess = \u00a77Big tree spawned. bigTreeSuccess= \u00a77Big tree spawned.
broadcast = [\u00a7cBroadcast\u00a7f]\u00a7a {0} broadcast=[\u00a7cBroadcast\u00a7f]\u00a7a {0}
buildAlert = \u00a7cYou are not permitted to build buildAlert=\u00a7cYou are not permitted to build
bukkitFormatChanged = Bukkit version format changed. Version not checked. bukkitFormatChanged=Bukkit version format changed. Version not checked.
burnMsg = \u00a77You set {0} on fire for {1} seconds. burnMsg=\u00a77You set {0} on fire for {1} seconds.
canTalkAgain = \u00a77You can talk again canTalkAgain=\u00a77You can talk again
cantFindGeoIpDB = Can''t find GeoIP database! cantFindGeoIpDB=Can''t find GeoIP database!
cantReadGeoIpDB = Failed to read GeoIP database! cantReadGeoIpDB=Failed to read GeoIP database!
cantSpawnItem = \u00a7cYou are not allowed to spawn the item {0} cantSpawnItem=\u00a7cYou are not allowed to spawn the item {0}
commandFailed = Command {0} failed: commandFailed=Command {0} failed:
commandHelpFailedForPlugin=Error getting help for: {0} commandHelpFailedForPlugin=Error getting help for: {0}
commandNotLoaded = \u00a7cCommand {0} is improperly loaded. commandNotLoaded=\u00a7cCommand {0} is improperly loaded.
compassBearing = \u00a77Bearing: {0} ({1} degrees). compassBearing=\u00a77Bearing: {0} ({1} degrees).
configFileMoveError = Failed to move config.yml to backup location. configFileMoveError=Failed to move config.yml to backup location.
configFileRenameError = Failed to rename temp file to config.yml configFileRenameError=Failed to rename temp file to config.yml
connectedPlayers = Connected players: connectedPlayers=Connected players:
connectionFailed = Failed to open connection. connectionFailed=Failed to open connection.
cooldownWithMessage = \u00a7cCooldown: {0} cooldownWithMessage=\u00a7cCooldown: {0}
corruptNodeInConfig = \u00a74Notice: Your configuration file has a corrupt {0} node. corruptNodeInConfig=\u00a74Notice: Your configuration file has a corrupt {0} node.
couldNotFindTemplate = Could not find template {0} couldNotFindTemplate=Could not find template {0}
creatingConfigFromTemplate = Creating config from template: {0} creatingConfigFromTemplate=Creating config from template: {0}
creatingEmptyConfig = Creating empty config: {0} creatingEmptyConfig=Creating empty config: {0}
creatingPortal = Creating portal at {0},{1},{2}. creative=creative
day = day day=day
days = days days=days
defaultBanReason = The Ban Hammer has spoken! defaultBanReason=The Ban Hammer has spoken!
deleteFileError = Could not delete file: {0} deleteFileError=Could not delete file: {0}
deleteHome = \u00a77Home {0} has been removed. deleteHome=\u00a77Home {0} has been removed.
deleteJail = \u00a77Jail {0} has been removed. deleteJail=\u00a77Jail {0} has been removed.
deleteWarp = \u00a77Warp {0} has been removed. deleteWarp=\u00a77Warp {0} has been removed.
deniedAccessCommand = {0} was denied access to command. deniedAccessCommand={0} was denied access to command.
dependancyDownloaded = [Essentials] Dependancy {0} downloaded successfully. dependancyDownloaded=[Essentials] Dependancy {0} downloaded successfully.
dependancyException = [Essentials] An error occurred when trying to download a dependacy dependancyException=[Essentials] An error occurred when trying to download a dependacy
dependancyNotFound = [Essentials] A required dependancy was not found, downloading now. dependancyNotFound=[Essentials] A required dependancy was not found, downloading now.
depth = \u00a77You are at sea level. depth=\u00a77You are at sea level.
depthAboveSea = \u00a77You are {0} block(s) above sea level. depthAboveSea=\u00a77You are {0} block(s) above sea level.
depthBelowSea = \u00a77You are {0} block(s) below sea level. depthBelowSea=\u00a77You are {0} block(s) below sea level.
destinationNotSet = Destination not set destinationNotSet=Destination not set
disableUnlimited = \u00a77Disabled unlimited placing of {0} for {1}. disableUnlimited=\u00a77Disabled unlimited placing of {0} for {1}.
disabled = disabled disabled=disabled
dontMoveMessage = \u00a77Teleportation will commence in {0}. Don''t move. dontMoveMessage=\u00a77Teleportation will commence in {0}. Don''t move.
downloadingGeoIp = Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB) downloadingGeoIp=Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB)
duplicatedUserdata = Duplicated userdata: {0} and {1} duplicatedUserdata=Duplicated userdata: {0} and {1}
enableUnlimited = \u00a77Giving unlimited amount of {0} to {1}. enableUnlimited=\u00a77Giving unlimited amount of {0} to {1}.
enabled = enabled enabled=enabled
errorCallingCommand = Error calling command /{0} errorCallingCommand=Error calling command /{0}
errorWithMessage = \u00a7cError: {0} errorWithMessage=\u00a7cError: {0}
essentialsReload = \u00a77Essentials Reloaded {0} essentialsReload=\u00a77Essentials Reloaded {0}
extinguish = \u00a77You extinguished yourself. extinguish=\u00a77You extinguished yourself.
extinguishOthers = \u00a77You extinguished {0}. extinguishOthers=\u00a77You extinguished {0}.
failedToCloseConfig = Failed to close config {0} failedToCloseConfig=Failed to close config {0}
failedToCreateConfig = Failed to create config {0} failedToCreateConfig=Failed to create config {0}
failedToWriteConfig = Failed to write config {0} failedToWriteConfig=Failed to write config {0}
fileRenameError = Renaming file {0} failed false=false
foreverAlone = \u00a7cYou have nobody to whom you can reply. fileRenameError=Renaming file {0} failed
freedMemory = Freed {0} MB. foreverAlone=\u00a7cYou have nobody to whom you can reply.
gcchunks = chunks, freedMemory=Freed {0} MB.
gcentities = entities gameMode=\u00a77Set game mode {0} for {1}.
gcfree = Free memory: {0} MB gcchunks= chunks,
gcmax = Maximum memory: {0} MB gcentities= entities
gctotal = Allocated memory: {0} MB gcfree=Free memory: {0} MB
generatingPortal = \u00a77Generating an exit portal. gcmax=Maximum memory: {0} MB
geoIpUrlEmpty = GeoIP download url is empty. gctotal=Allocated memory: {0} MB
geoIpUrlInvalid = GeoIP download url is invalid. geoIpUrlEmpty=GeoIP download url is empty.
geoipJoinFormat = Player {0} comes from {1} geoIpUrlInvalid=GeoIP download url is invalid.
godDisabledFor = disabled for {0} geoipJoinFormat=Player {0} comes from {1}
godEnabledFor = enabled for {0} godDisabledFor=disabled for {0}
godMode = \u00a77God mode {0}. godEnabledFor=enabled for {0}
haveBeenReleased = \u00a77You have been released godMode=\u00a77God mode {0}.
heal = \u00a77You have been healed. haveBeenReleased=\u00a77You have been released
healOther = \u00a77Healed {0}. heal=\u00a77You have been healed.
helpConsole = To view help from the console, type ?. healOther=\u00a77Healed {0}.
helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpConsole=To view help from the console, type ?.
helpPages = Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f: helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
holeInFloor = Hole in floor helpPages=Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f:
homeSet = \u00a77Home set. holeInFloor=Hole in floor
homeSetToBed = \u00a77Your home is now set to this bed. homeSet=\u00a77Home set.
homes = Homes: {0} homeSetToBed=\u00a77Your home is now set to this bed.
hour = hour homes=Homes: {0}
hours = hours hour=hour
ignorePlayer = You ignore player {0} from now on. hours=hours
illegalDate = Illegal date format. ignorePlayer=You ignore player {0} from now on.
infoChapter = Select chapter: illegalDate=Illegal date format.
infoChapterPages = Chapter {0}, page \u00a7c{1}\u00a7f of \u00a7c{2}\u00a7f: infoChapter=Select chapter:
infoFileDoesNotExist = File info.txt does not exist. Creating one for you. infoChapterPages=Chapter {0}, page \u00a7c{1}\u00a7f of \u00a7c{2}\u00a7f:
infoPages = Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f: infoFileDoesNotExist=File info.txt does not exist. Creating one for you.
infoUnknownChapter = Unknown chapter. infoPages=Page \u00a7c{0}\u00a7f of \u00a7c{1}\u00a7f:
invBigger = The other users inventory is bigger than yours. infoUnknownChapter=Unknown chapter.
invRestored = Your inventory has been restored. invBigger=The other users inventory is bigger than yours.
invSee = You see the inventory of {0}. invRestored=Your inventory has been restored.
invSeeHelp = Use /invsee to restore your inventory. invSee=You see the inventory of {0}.
invalidCharge = \u00a7cInvalid charge. invSeeHelp=Use /invsee to restore your inventory.
invalidMob = Invalid mob type. invalidCharge=\u00a7cInvalid charge.
invalidServer = Invalid server! invalidMob=Invalid mob type.
invalidSignLine = Line {0} on sign is invalid. invalidServer=Invalid server!
invalidWorld = \u00a7cInvalid world. invalidSignLine=Line {0} on sign is invalid.
inventoryCleared = \u00a77Inventory Cleared. invalidWorld=\u00a7cInvalid world.
inventoryClearedOthers = \u00a77Inventory of \u00a7c{0}\u00a77 cleared. inventoryCleared=\u00a77Inventory Cleared.
is = is inventoryClearedOthers=\u00a77Inventory of \u00a7c{0}\u00a77 cleared.
itemCannotBeSold = That item cannot be sold to the server. is=is
itemMustBeStacked = Item must be traded in stacks. A quantity of 2s would be two stacks, etc. itemCannotBeSold=That item cannot be sold to the server.
itemNotEnough1 = \u00a7cYou do not have enough of that item to sell. itemMustBeStacked=Item must be traded in stacks. A quantity of 2s would be two stacks, etc.
itemNotEnough2 = \u00a77If you meant to sell all of your items of that type, use /sell itemname itemNotEnough1=\u00a7cYou do not have enough of that item to sell.
itemNotEnough3 = \u00a77/sell itemname -1 will sell all but one item, etc. itemNotEnough2=\u00a77If you meant to sell all of your items of that type, use /sell itemname
itemSellAir = You really tried to sell Air? Put an item in your hand. itemNotEnough3=\u00a77/sell itemname -1 will sell all but one item, etc.
itemSold = \u00a77Sold for \u00a7c {0} \u00a77 ({1} items at {2} each) itemSellAir=You really tried to sell Air? Put an item in your hand.
itemSoldConsole = {0} sold {1} for \u00a77 {2} \u00a77 ({3} items at {4} each) itemSold=\u00a77Sold for \u00a7c{0} \u00a77({1} {2} at {3} each)
itemSpawn = \u00a77Giving {0} of {1} itemSoldConsole={0} sold {1} for \u00a77{2} \u00a77({3} items at {4} each)
itemsCsvNotLoaded = Could not load items.csv. itemSpawn=\u00a77Giving {0} of {1}
jailAlreadyIncarcerated = \u00a7cPerson is already in jail: {0} itemsCsvNotLoaded=Could not load items.csv.
jailMessage = \u00a7cYou do the crime, you do the time. jailAlreadyIncarcerated=\u00a7cPerson is already in jail: {0}
jailNotExist = That jail does not exist. jailMessage=\u00a7cYou do the crime, you do the time.
jailReleased = \u00a77Player \u00a7e{0}\u00a77 unjailed. jailNotExist=That jail does not exist.
jailReleasedPlayerNotify = \u00a77You have been released! jailReleased=\u00a77Player \u00a7e{0}\u00a77 unjailed.
jailSentenceExtended = Jail time extend to: {0) jailReleasedPlayerNotify=\u00a77You have been released!
jailSet = \u00a77Jail {0} has been set jailSentenceExtended=Jail time extend to: {0)
jumpError = That would hurt your computer''s brain. jailSet=\u00a77Jail {0} has been set
kickDefault = Kicked from server jumpError=That would hurt your computer''s brain.
kickExempt = \u00a7cYou can not kick that person. kickDefault=Kicked from server
kill = \u00a77Killed {0}. kickExempt=\u00a7cYou can not kick that person.
kitError = \u00a7cThere are no valid kits. kill=\u00a77Killed {0}.
kitError2 = \u00a7cThat kit does not exist or is improperly defined. kitError=\u00a7cThere are no valid kits.
kitErrorHelp = \u00a7cPerhaps an item is missing a quantity in the configuration? kitError2=\u00a7cThat kit does not exist or is improperly defined.
kitGive = \u00a77Giving kit {0}. kitErrorHelp=\u00a7cPerhaps an item is missing a quantity in the configuration?
kitInvFull = \u00a7cYour inventory was full, placing kit on the floor kitGive=\u00a77Giving kit {0}.
kitTimed = \u00a7cYou can''t use that kit again for another {0}. kitInvFull=\u00a7cYour inventory was full, placing kit on the floor
kits = \u00a77Kits: {0} kitTimed=\u00a7cYou can''t use that kit again for another {0}.
lightningSmited = \u00a77You have just been smited kits=\u00a77Kits: {0}
lightningUse = \u00a77Smiting {0} lightningSmited=\u00a77You have just been smited
loadWarpError = Failed to load warp {0} lightningUse=\u00a77Smiting {0}
loadinfo = Loaded {0} build {1} by: {2} loadWarpError=Failed to load warp {0}
localFormat = Local: <{0}> {1} loadinfo=Loaded {0} build {1} by: {2}
mailClear = \u00a7cTo mark your mail as read, type /mail clear localFormat=Local: <{0}> {1}
mailCleared = \u00a77Mail Cleared! mailClear=\u00a7cTo mark your mail as read, type /mail clear
mailSent = \u00a77Mail sent! mailCleared=\u00a77Mail Cleared!
markMailAsRead = \u00a7cTo mark your mail as read, type /mail clear mailSent=\u00a77Mail sent!
markedAsAway = \u00a77You are now marked as away. markMailAsRead=\u00a7cTo mark your mail as read, type /mail clear
markedAsNotAway = \u00a77You are no longer marked as away. markedAsAway=\u00a77You are now marked as away.
markedAsNotAway=\u00a77You are no longer marked as away.
maxHomes=You cannot set more than {0} homes. maxHomes=You cannot set more than {0} homes.
mayNotJail = \u00a7cYou may not jail that person mayNotJail=\u00a7cYou may not jail that person
me = me me=me
minute = minute minute=minute
minutes = minutes minutes=minutes
missingItems = You do not have {0}x {1}. missingItems=You do not have {0}x {1}.
missingPrefixSuffix = Missing a prefix or suffix for {0} missingPrefixSuffix=Missing a prefix or suffix for {0}
mobSpawnError = Error while changing mob spawner. mobSpawnError=Error while changing mob spawner.
mobSpawnLimit = Mob quantity limited to server limit mobSpawnLimit=Mob quantity limited to server limit
mobSpawnTarget = Target block must be a mob spawner. mobSpawnTarget=Target block must be a mob spawner.
moneyRecievedFrom = \u00a7a{0} has been received from {1} mobsAvailable=\u00a77Mobs: {0}
moneySentTo = \u00a7a{0} has been sent to {1} moneyRecievedFrom=\u00a7a{0} has been received from {1}
moneyTaken = {0} taken from your bank account. moneySentTo=\u00a7a{0} has been sent to {1}
month = month moneyTaken={0} taken from your bank account.
months = months month=month
moreThanZero = Quantities must be greater than 0. months=months
msgFormat = \u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2} moreThanZero=Quantities must be greater than 0.
muteExempt = \u00a7cYou may not mute that player. msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
mutedPlayer = Player {0} muted. muteExempt=\u00a7cYou may not mute that player.
mutedPlayerFor = Player {0} muted for {1}. mutedPlayer=Player {0} muted.
mutedUserSpeaks = {0} tried to speak, but is muted. mutedPlayerFor=Player {0} muted for {1}.
needTpohere = You need access to /tpohere to teleport other players. mutedUserSpeaks={0} tried to speak, but is muted.
negativeBalanceError = User is not allowed to have a negative balance. needTpohere=You need access to /tpohere to teleport other players.
nickChanged = Nickname changed. negativeBalanceError=User is not allowed to have a negative balance.
nickChanged=Nickname changed.
nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickDisplayName=\u00a77You have to enable change-displayname in Essentials config.
nickInUse = \u00a7cThat name is already in use. nickInUse=\u00a7cThat name is already in use.
nickNamesAlpha = \u00a7cNicknames must be alphanumeric. nickNamesAlpha=\u00a7cNicknames must be alphanumeric.
nickNoMore = \u00a77You no longer have a nickname. nickNoMore=\u00a77You no longer have a nickname.
nickOthersPermission = \u00a7cYou do not have permission to change the nickname of others nickOthersPermission=\u00a7cYou do not have permission to change the nickname of others
nickSet = \u00a77Your nickname is now \u00a7c{0} nickSet=\u00a77Your nickname is now \u00a7c{0}
noAccessCommand = \u00a7cYou do not have access to that command. noAccessCommand=\u00a7cYou do not have access to that command.
noAccessPermission = \u00a7cYou do not have permission to access that {0}. noAccessPermission=\u00a7cYou do not have permission to access that {0}.
noDestroyPermission = \u00a7cYou do not have permission to destroy that {0}. noDestroyPermission=\u00a7cYou do not have permission to destroy that {0}.
noHelpFound = \u00a7cNo matching commands. noHelpFound=\u00a7cNo matching commands.
noHomeSet = You have not set a home. noHomeSet=You have not set a home.
noHomeSetPlayer = Player has not set a home. noHomeSetPlayer=Player has not set a home.
noKitPermission = \u00a7cYou need the \u00a7c{0}\u00a7c permission to use that kit. noKitPermission=\u00a7cYou need the \u00a7c{0}\u00a7c permission to use that kit.
noKits = \u00a77There are no kits available yet noKits=\u00a77There are no kits available yet
noMail = You do not have any mail noMail=You do not have any mail
noMailSendPerm = \u00a7cYou do not have the \u00a7fessentials.mail.send\u00a7c permission. noMailSendPerm=\u00a7cYou do not have the \u00a7fessentials.mail.send\u00a7c permission.
noMotd = \u00a7cThere is no message of the day. noMotd=\u00a7cThere is no message of the day.
noNewMail = \u00a77You have no new mail. noNewMail=\u00a77You have no new mail.
noPendingRequest = You do not have a pending request. noPendingRequest=You do not have a pending request.
noPlacePermission = \u00a7cYou do not have permission to place a block near that sign. noPlacePermission=\u00a7cYou do not have permission to place a block near that sign.
noPowerTools=You have no power tools assigned. noPowerTools=You have no power tools assigned.
noRules = \u00a7cThere are no rules specified yet. noRules=\u00a7cThere are no rules specified yet.
noWarpsDefined = No warps defined noWarpsDefined=No warps defined
none = none none=none
notAllowedToQuestion = \u00a7cYou are not authorized to use question. notAllowedToQuestion=\u00a7cYou are not authorized to use question.
notAllowedToShout = \u00a7cYou are not authorized to shout. notAllowedToShout=\u00a7cYou are not authorized to shout.
notEnoughMoney = You do not have sufficient funds. notEnoughMoney=You do not have sufficient funds.
notRecommendedBukkit = Bukkit version is not the recommended build for Essentials. notRecommendedBukkit=Bukkit version is not the recommended build for Essentials.
notSupportedYet = Not supported yet. notSupportedYet=Not supported yet.
now = now now=now
numberRequired = A number goes there, silly. numberRequired=A number goes there, silly.
onlyDayNight = /time only supports day/night. onlyDayNight=/time only supports day/night.
onlyPlayers = Only in-game players can use {0}. onlyPlayers=Only in-game players can use {0}.
onlySunStorm = /weather only supports sun/storm. onlySunStorm=/weather only supports sun/storm.
pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
pTimePlayers = These players have their own time: pTimePlayers=These players have their own time:
pTimeReset = Player time has been reset for: \u00a7e{0} pTimeReset=Player time has been reset for: \u00a7e{0}
pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
parseError = Error parsing {0} on line {1} parseError=Error parsing {0} on line {1}
pendingTeleportCancelled = \u00a7cPending teleportation request cancelled. pendingTeleportCancelled=\u00a7cPending teleportation request cancelled.
permissionsError = Missing Permissions/GroupManager; chat prefixes/suffixes will be disabled. permissionsError=Missing Permissions/GroupManager; chat prefixes/suffixes will be disabled.
playerBanned = \u00a7cPlayer {0} banned {1} for {2} playerBanned=\u00a7cPlayer {0} banned {1} for {2}
playerInJail = \u00a7cPlayer is already in jail {0}. playerInJail=\u00a7cPlayer is already in jail {0}.
playerJailed = \u00a77Player {0} jailed. playerJailed=\u00a77Player {0} jailed.
playerJailedFor = \u00a77Player {0} jailed for {1}. playerJailedFor= \u00a77Player {0} jailed for {1}.
playerKicked = \u00a7cPlayer {0} kicked {1} for {2} playerKicked=\u00a7cPlayer {0} kicked {1} for {2}
playerMuted = \u00a77You have been muted playerMuted=\u00a77You have been muted
playerMutedFor = \u00a77You have been muted for {0} playerMutedFor=\u00a77You have been muted for {0}
playerNeverOnServer = \u00a7cPlayer {0} was never on this server. playerNeverOnServer=\u00a7cPlayer {0} was never on this server.
playerNotFound = \u00a7cPlayer not found. playerNotFound=\u00a7cPlayer not found.
playerUnmuted = \u00a77You have been unmuted playerUnmuted=\u00a77You have been unmuted
pong = Pong! pong=Pong!
possibleWorlds = \u00a77Possible worlds are the numbers 0 through {0}. possibleWorlds=\u00a77Possible worlds are the numbers 0 through {0}.
powerToolAir = Command can''t be attached to air. powerToolAir=Command can''t be attached to air.
powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. powerToolAlreadySet=Command \u00a7c{0}\u00a7f is already assigned to {1}.
powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. powerToolAttach=\u00a7c{0}\u00a7f command assigned to {1}.
powerToolClearAll = All powertool commands have been cleared. powerToolClearAll=All powertool commands have been cleared.
powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. powerToolList={1} has the following commands: \u00a7c{0}\u00a7f.
powerToolListEmpty = {0} has no commands assigned. powerToolListEmpty={0} has no commands assigned.
powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. powerToolNoSuchCommandAssigned=Command \u00a7c{0}\u00a7f has not been assigned to {1}.
powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemove=Command \u00a7c{0}\u00a7f removed from {1}.
powerToolRemoveAll = All commands removed from {0}. powerToolRemoveAll=All commands removed from {0}.
powerToolsEnabled=All of your power tools have been enabled.
powerToolsDisabled=All of your power tools have been enabled. powerToolsDisabled=All of your power tools have been enabled.
protectionOwner = \u00a76[EssentialsProtect] Protection owner: {0} powerToolsEnabled=All of your power tools have been enabled.
questionFormat = \u00a77[Question]\u00a7f {0} protectionOwner=\u00a76[EssentialsProtect] Protection owner: {0}
reloadAllPlugins = \u00a77Reloaded all plugins. questionFormat=\u00a77[Question]\u00a7f {0}
repair = You have successfully repaired your: \u00a7e{0}. reloadAllPlugins=\u00a77Reloaded all plugins.
repairAlreadyFixed = \u00a77This item does not need repairing. repair=You have successfully repaired your: \u00a7e{0}.
repairInvalidType = \u00a7cThis item cannot be repaired. repairAlreadyFixed=\u00a77This item does not need repairing.
repairNone = There were no items that needing repairing. repairInvalidType=\u00a7cThis item cannot be repaired.
requestAccepted = \u00a77Teleport request accepted. repairNone=There were no items that needing repairing.
requestAcceptedFrom = \u00a77{0} accepted your teleport request. requestAccepted=\u00a77Teleport request accepted.
requestDenied = \u00a77Teleport request denied. requestAcceptedFrom=\u00a77{0} accepted your teleport request.
requestDeniedFrom = \u00a77{0} denied your teleport request requestDenied=\u00a77Teleport request denied.
requestSent = \u00a77Request sent to {0}\u00a77. requestDeniedFrom=\u00a77{0} denied your teleport request
returnPlayerToJailError = Error occurred when trying to return player to jail. requestSent=\u00a77Request sent to {0}\u00a77.
second = second returnPlayerToJailError=Error occurred when trying to return player to jail.
seconds = seconds second=second
seenOffline = Player {0} is offline since {1} seconds=seconds
seenOnline = Player {0} is online since {1} seenOffline=Player {0} is offline since {1}
serverFull = Server is full seenOnline=Player {0} is online since {1}
setSpawner = Changed spawner type to {0} serverFull=Server is full
sheepMalformedColor = Malformed color. setSpawner=Changed spawner type to {0}
shoutFormat = \u00a77[Shout]\u00a7f {0} sheepMalformedColor=Malformed color.
signFormatFail = \u00a74[{0}] shoutFormat=\u00a77[Shout]\u00a7f {0}
signFormatSuccess = \u00a71[{0}] signFormatFail=\u00a74[{0}]
signFormatTemplate = [{0}] signFormatSuccess=\u00a71[{0}]
signProtectInvalidLocation = \u00a74You are not allowed to create sign here. signFormatTemplate=[{0}]
similarWarpExist = A warp with a similar name already exists. signProtectInvalidLocation=\u00a74You are not allowed to create sign here.
slimeMalformedSize = Malformed size. similarWarpExist=A warp with a similar name already exists.
soloMob = That mob likes to be alone slimeMalformedSize=Malformed size.
spawnSet = \u00a77Spawn location set for group {0}. soloMob=That mob likes to be alone
spawned = spawned spawnSet=\u00a77Spawn location set for group {0}.
suicideMessage = \u00a77Goodbye Cruel World... spawned=spawned
suicideSuccess = \u00a77{0} took their own life suicideMessage=\u00a77Goodbye Cruel World...
takenFromAccount = \u00a7c{0} has been taken from your account. suicideSuccess= \u00a77{0} took their own life
takenFromOthersAccount = \u00a7c{0} has been taken from {1} account. survival=survival
teleportAAll = \u00a77Teleporting request sent to all players... takenFromAccount=\u00a7c{0} has been taken from your account.
teleportAll = \u00a77Teleporting all players... takenFromOthersAccount=\u00a7c{0} has been taken from {1} account.
teleportAtoB = \u00a77{0}\u00a77 teleported you to {1}\u00a77. teleportAAll=\u00a77Teleporting request sent to all players...
teleportDisabled = {0} has teleportation disabled. teleportAll=\u00a77Teleporting all players...
teleportHereRequest = \u00a7c{0}\u00a7c has requested that you teleport to them. teleportAtoB=\u00a77{0}\u00a77 teleported you to {1}\u00a77.
teleportNewPlayerError = Failed to teleport new player teleportDisabled={0} has teleportation disabled.
teleportRequest = \u00a7c{0}\u00a7c has requested to teleport to you. teleportHereRequest=\u00a7c{0}\u00a7c has requested that you teleport to them.
teleportTop = \u00a77Teleporting to top. teleportNewPlayerError=Failed to teleport new player
teleportationCommencing = \u00a77Teleportation commencing... teleportRequest=\u00a7c{0}\u00a7c has requested to teleport to you.
teleportationDisabled = \u00a77Teleportation disabled. teleportTop=\u00a77Teleporting to top.
teleportationEnabled = \u00a77Teleportation enabled. teleportationCommencing=\u00a77Teleportation commencing...
teleporting = \u00a77Teleporting... teleportationDisabled=\u00a77Teleportation disabled.
teleportingPortal = \u00a77Teleporting via portal. teleportationEnabled=\u00a77Teleportation enabled.
tempBanned = Temporarily banned from server for {0} teleporting=\u00a77Teleporting...
tempbanExempt = \u00a77You may not tempban that player teleportingPortal=\u00a77Teleporting via portal.
thunder = You {0} thunder in your world tempBanned=Temporarily banned from server for {0}
thunderDuration = You {0} thunder in your world for {1} seconds. tempbanExempt=\u00a77You may not tempban that player
timeBeforeHeal = Time before next heal: {0} thunder= You {0} thunder in your world
timeBeforeTeleport = Time before next teleport: {0} thunderDuration=You {0} thunder in your world for {1} seconds.
timeFormat = \u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f timeBeforeHeal=Time before next heal: {0}
timePattern = (?:([0-9]+)\\s*y[a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)? timeBeforeTeleport=Time before next teleport: {0}
timeSet = Time set in all worlds. timeFormat=\u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f
timeSetPermission = \u00a7cYou are not authorized to set the time. timePattern=(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)?
timeWorldCurrent = The current time in {0} is \u00a73{1} timeSet=Time set in all worlds.
timeWorldSet = The time was set to {0} in: \u00a7c{1} timeSetPermission=\u00a7cYou are not authorized to set the time.
tradeCompleted = \u00a77Trade completed. timeWorldCurrent=The current time in {0} is \u00a73{1}
tradeSignEmpty = The trade sign does not have enough supply left. timeWorldSet=The time was set to {0} in: \u00a7c{1}
tradeSignEmptyOwner = There is nothing to collect from this trade sign. tradeCompleted=\u00a77Trade completed.
treeFailure = \u00a7cTree generation failure. Try again on grass or dirt. tradeSignEmpty=The trade sign does not have enough supply left.
treeSpawned = \u00a77Tree spawned. tradeSignEmptyOwner=There is nothing to collect from this trade sign.
typeTpaccept = \u00a77To teleport, type \u00a7c/tpaccept\u00a77. treeFailure=\u00a7cTree generation failure. Try again on grass or dirt.
typeTpdeny = \u00a77To deny this request, type \u00a7c/tpdeny\u00a77. treeSpawned=\u00a77Tree spawned.
typeWorldName = \u00a77You can also type the name of a specific world. true=true
unableToSpawnMob = Unable to spawn mob. typeTpaccept=\u00a77To teleport, type \u00a7c/tpaccept\u00a77.
unbannedIP = Unbanned IP address. typeTpdeny=\u00a77To deny this request, type \u00a7c/tpdeny\u00a77.
unbannedPlayer = Unbanned player. typeWorldName=\u00a77You can also type the name of a specific world.
unignorePlayer = You are not ignoring player {0} anymore. unableToSpawnMob=Unable to spawn mob.
unknownItemId = Unknown item id: {0} unbannedIP=Unbanned IP address.
unknownItemInList = Unknown item {0} in {1} list. unbannedPlayer=Unbanned player.
unknownItemName = Unknown item name: {0} unignorePlayer=You are not ignoring player {0} anymore.
unlimitedItemPermission = \u00a7cNo permission for unlimited item {0}. unknownItemId=Unknown item id: {0}
unlimitedItems = Unlimited items: unknownItemInList=Unknown item {0} in {1} list.
unmutedPlayer = Player {0} unmuted. unknownItemName=Unknown item name: {0}
upgradingFilesError = Error while upgrading the files unlimitedItemPermission=\u00a7cNo permission for unlimited item {0}.
userCreatedPortal = {0} used a portal and generated an exit portal. unlimitedItems=Unlimited items:
userDoesNotExist = The user {0} does not exist. unmutedPlayer=Player {0} unmuted.
userIsAway = {0} is now AFK upgradingFilesError=Error while upgrading the files
userIsNotAway = {0} is no longer AFK userDoesNotExist=The user {0} does not exist.
userJailed = \u00a77You have been jailed userIsAway={0} is now AFK
userUsedPortal = {0} used an existing exit portal. userIsNotAway={0} is no longer AFK
userdataMoveBackError = Failed to move userdata/{0}.tmp to userdata/{1} userJailed=\u00a77You have been jailed
userdataMoveError = Failed to move userdata/{0} to userdata/{1}.tmp userUsedPortal={0} used an existing exit portal.
usingPortal = \u00a77Teleporting via portal to an existing portal. userdataMoveBackError=Failed to move userdata/{0}.tmp to userdata/{1}
usingTempFolderForTesting = Using temp folder for testing: userdataMoveError=Failed to move userdata/{0} to userdata/{1}.tmp
versionMismatch = Version mismatch! Please update {0} to the same version. usingTempFolderForTesting=Using temp folder for testing:
versionMismatchAll = Version mismatch! Please update all Essentials jars to the same version. versionMismatch=Version mismatch! Please update {0} to the same version.
voiceSilenced = \u00a77Your voice has been silenced versionMismatchAll=Version mismatch! Please update all Essentials jars to the same version.
warpDeleteError = Problem deleting the warp file. voiceSilenced=\u00a77Your voice has been silenced
warpListPermission = \u00a7cYou do not have Permission to list that warps. warpDeleteError=Problem deleting the warp file.
warpNotExist = That warp does not exist. warpListPermission=\u00a7cYou do not have Permission to list that warps.
warpSet = \u00a77Warp {0} set. warpNotExist=That warp does not exist.
warpUsePermission = \u00a7cYou do not have Permission to use that warp. warpSet=\u00a77Warp {0} set.
warpingTo = \u00a77Warping to {0}. warpUsePermission=\u00a7cYou do not have Permission to use that warp.
warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warpingTo=\u00a77Warping to {0}.
weatherStorm = \u00a77You set the weather to storm in {0} warps=Warps: {0}
weatherStormFor = \u00a77You set the weather to storm in {0} for {1} seconds warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
weatherSun = \u00a77You set the weather to sun in {0} weatherStorm=\u00a77You set the weather to storm in {0}
weatherSunFor = \u00a77You set the weather to sun in {0} for {1} seconds weatherStormFor=\u00a77You set the weather to storm in {0} for {1} seconds
whoisGeoLocation = \u00a79 - Location: {0} weatherSun=\u00a77You set the weather to sun in {0}
whoisHealth = \u00a79 - Health: {0}/20 weatherSunFor=\u00a77You set the weather to sun in {0} for {1} seconds
whoisIPAddress = \u00a79 - IP Address: {0} whoisGamemode=\u00a79 - Gamemode: {0}
whoisIs = {0} is {1} whoisGeoLocation=\u00a79 - Location: {0}
whoisLocation = \u00a79 - Location: ({0}, {1}, {2}, {3}) whoisGod=\u00a79 - God mode: {0}
whoisMoney = \u00a79 - Money: {0} whoisHealth=\u00a79 - Health: {0}/20
whoisStatusAvailable = \u00a79 - Status: Available whoisIPAddress=\u00a79 - IP Address: {0}
whoisStatusAway = \u00a79 - Status: \u00a7cAway\u00a7f whoisIs={0} is {1}
worth = \u00a77Stack of {0} worth \u00a7c{1}\u00a77 ({2} item(s) at {3} each) whoisLocation=\u00a79 - Location: ({0}, {1}, {2}, {3})
worthMeta = \u00a77Stack of {0} with metadata of {1} worth \u00a7c{2}\u00a77 ({3} item(s) at {4} each) whoisMoney=\u00a79 - Money: {0}
worthSet = Worth value set whoisOP=\u00a79 - OP: {0}
year = year whoisStatusAvailable=\u00a79 - Status: Available
years = years whoisStatusAway=\u00a79 - Status: \u00a7cAway\u00a7f
youAreHealed = \u00a77You have been healed. worth=\u00a77Stack of {0} worth \u00a7c{1}\u00a77 ({2} item(s) at {3} each)
youHaveNewMail = \u00a7cYou have {0} messages!\u00a7f Type \u00a77/mail read\u00a7f to view your mail. worthMeta=\u00a77Stack of {0} with metadata of {1} worth \u00a7c{2}\u00a77 ({3} item(s) at {4} each)
worthSet=Worth value set
year=year
years=years
youAreHealed=\u00a77You have been healed.
youHaveNewMail=\u00a7cYou have {0} messages!\u00a7f Type \u00a77/mail read\u00a7f to view your mail.

View File

@@ -0,0 +1,378 @@
#version: TeamCity
# Single quotes have to be doubled: ''
# Translations start here
# by:
action=* {0} {1}
addedToAccount=\u00a7a{0} ha sido agregado a tu cuenta.
addedToOthersAccount=\u00a7a{0} ha sido agregado a la cuenta de {1}.
alertBroke=roto:
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} en: {3}
alertPlaced=situado:
alertUsed=usado:
autoAfkKickReason=Has sido echado por ausentarte mas de {0} minutos.
backAfterDeath=\u00a77Usa el comando /back para volver al punto en el que moriste.
backUsageMsg=\u00a77Volviendo a la localizacion anterior.
backupFinished=Copia de seguridad completada
backupStarted=Comenzando copia de seguridad
balance=\u00a77Cantidad: {0}
balanceTop=\u00a77Top {0} cantidades
banExempt=\u00a7cNo puedes banear a ese jugador
banIpAddress=\u00a77Direccion IP baneada
bannedIpsFileError=Error leyendo banned-ips.txt
bannedIpsFileNotFound=banned-ips.txt no encontrado
bannedPlayersFileError=Error leyendo banned-players.txt
bannedPlayersFileNotFound=banned-players.txt no encontrado
bigTreeFailure=\u00a7cBig Generacion de arbol fallida. Prueba de nuevo en hierba o arena.
bigTreeSuccess= \u00a77Big Arbol generado.
broadcast=[\u00a7cBroadcast\u00a7f]\u00a7a {0}
buildAlert=\u00a7cNo tienes permisos para construir
bukkitFormatChanged=Version de formato de Bukkit cambiado. Version no comprobada.
burnMsg=\u00a77Has puesto {0} en fuego durante {1} segundos.
canTalkAgain=\u00a77Ya puedes hablar de nuevo
cantFindGeoIpDB=No se puede encontrar la bases de datos del Geo IP
cantReadGeoIpDB=Error al intentar leer la base de datos del Geo IP
cantSpawnItem=\u00a7cNo tienes acceso para producir este objeto {0}
commandFailed=Command {0} fallado:
commandHelpFailedForPlugin=Error obteniendo ayuda para: {0}
commandNotLoaded=\u00a7cCommand {0} esta cargado incorrectamente.
compassBearing=\u00a77Bearing: {0} ({1} grados).
configFileMoveError=Error al mover config.yml para hacer una copia de seguridad de la localizacion.
configFileRenameError=Error al renombrar archivo temp a config.yml
connectedPlayers=Jugadores conectados:
connectionFailed=Error al abrir conexion.
cooldownWithMessage=\u00a7cCooldown: {0}
corruptNodeInConfig=\u00a74Notice: Tu archivo de configuracion tiene un nodo {0} incorrecto.
couldNotFindTemplate=No se puede encontrar el template {0}
creatingConfigFromTemplate=Creando configuracion desde el template: {0}
creatingEmptyConfig=Creando configuracion vacia: {0}
creative=creative
day=dia
days=dias
defaultBanReason=Baneado por incumplir las normas!
deleteFileError=No se puede borrar el archivo: {0}
deleteHome=\u00a77Home {0} ha sido borrado.
deleteJail=\u00a77Jail {0} ha sido borrado.
deleteWarp=\u00a77Warp {0} ha sido borrado.
deniedAccessCommand={0} ha denegado el acceso al comando.
dependancyDownloaded=[Essentials] Dependencia {0} descargada correctamente.
dependancyException=[Essentials] Error al intentar descargar la dependencia.
dependancyNotFound=[Essentials] La dependencia necesitada no se encontro, descargandola...
depth=\u00a77Estas al nivel del mar.
depthAboveSea=\u00a77Estas {0} bloque(s) por encima del mar.
depthBelowSea=\u00a77Estas {0} bloque(s) por debajo del mar.
destinationNotSet=Destino no establecido.
disableUnlimited=\u00a77Desactivando colocacion ilimitada de {0} para {1}.
disabled=desactivado
dontMoveMessage=\u00a77Teletransporte comenzara en {0}. No te muevas.
downloadingGeoIp=Descargando base de datos de GeoIP ... puede llevar un tiempo (pais: 0.6 MB, ciudad: 20MB)
duplicatedUserdata=Datos de usuario duplicados: {0} y {1}
enableUnlimited=\u00a77Dando cantidad ilimitada de {0} a {1}.
enabled=activado
errorCallingCommand=Error al ejecutar el comando /{0}
errorWithMessage=\u00a7cError: {0}
essentialsReload=\u00a77Essentials Recargado {0}
extinguish=\u00a77Te has suicidado.
extinguishOthers=\u00a77Has matado a {0}.
failedToCloseConfig=Error al cerrar configuracion {0}
failedToCreateConfig=Error al crear configuracion {0}
failedToWriteConfig=Error al escribir configuracion {0}
false=false
fileRenameError=Error al renombrar el archivo {0}
foreverAlone=\u00a7cNo tienes nadie a quien puedas responder.
freedMemory= {0} MB libres.
gameMode=\u00a77Set game mode {0} for {1}.
gcchunks= pixeles,
gcentities= entidades
gcfree=Memoria libre: {0} MB
gcmax=Memoria maxima: {0} MB
gctotal=Memoria localizada: {0} MB
geoIpUrlEmpty=Link para descargar GeoIP esta vacio.
geoIpUrlInvalid=Link para descargar GeoIP es invalido.
geoipJoinFormat=El jugador {0} viene de {1}
godDisabledFor=Desactivado para {0}
godEnabledFor=Activado para {0}
godMode=\u00a77Modo Dios {0}.
haveBeenReleased=\u00a77Has sido liberado
heal=\u00a77Has sido curado.
healOther=\u00a77Has curado a {0}.
helpConsole=Para obtener ayuda de la consola, escribe ?.
helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
helpPages=Pagina \u00a7c{0}\u00a7f de \u00a7c{1}\u00a7f:
holeInFloor=Agujero en el suelo
homeSet=\u00a77Hogar establecido.
homeSetToBed=\u00a77Tu hogar esta ahora establecido a esta cama.
homes=Hogares: {0}
hour=hora
hours=horas
ignorePlayer=A partir de ahora ignoras al jugador {0}.
illegalDate=Forma de fecha ilegal.
infoChapter=Selecciona una seccion:
infoChapterPages=Seccion {0}, pagina \u00a7c{1}\u00a7f of \u00a7c{2}\u00a7f:
infoFileDoesNotExist=El archivo info.txt no existe. Creando uno para ti.
infoPages=Pagina \u00a7c{0}\u00a7f de \u00a7c{1}\u00a7f:
infoUnknownChapter=Seccion desconocida.
invBigger=El inventario del otro usuario es mas grande que el tuyo
invRestored=Tu inventario ha sido recuperado.
invSee=Estas viendo el inventario de {0}.
invSeeHelp=Usa /invsee para recuperar tu inventario.
invalidCharge=\u00a7cCargo invalido.
invalidMob=Mob invalido.
invalidServer=Servidor invalido!
invalidSignLine=Linea {0} en el signo es invalida.
invalidWorld=\u00a7cMundo invalido.
inventoryCleared=\u00a77Inventario limpiado.
inventoryClearedOthers=\u00a77Inventario de \u00a7c{0}\u00a77 limpiado.
is=es
itemCannotBeSold=Ese objeto no puede ser vendido al servidor.
itemMustBeStacked=El objeto tiene que ser intercambiado en pilas. Una cantidad de 2s seria de dos pilas, etc.
itemNotEnough1=\u00a7cNo tienes suficientes ejemplares de ese objeto para venderlo.
itemNotEnough2=\u00a77Si pensabas en vender todos tus objetos de ese tipo, usa /sell nombredeobjeto
itemNotEnough3=\u00a77/sell nombredeobjeto -1 vendera todos excepto un objeto, etc.
itemSellAir=Realmente has intentado vender Aire? Pon un objeto en tu mano!
itemSold=\u00a77Vendido para \u00a7c {0} \u00a77 ({1} {2} a {3} cada uno)
itemSoldConsole={0} Vendido {1} para\u00a77 {2} \u00a77({3} objetos a {4} cada uno)
itemSpawn=\u00a77Dando {0} de {1}
itemsCsvNotLoaded=Error al leer items.csv.
jailAlreadyIncarcerated=\u00a7cLa persona ya esta en la carcel: {0}
jailMessage=\u00a7cPor hacer el mal, tiempo en la carcel estaras.
jailNotExist=Esa carcel no existe.
jailReleased=\u00a77Player \u00a7e{0}\u00a77 liberado.
jailReleasedPlayerNotify=\u00a77 Has sido liberado!!
jailSentenceExtended=El tiempo en la carcel se alarga hasta: {0)
jailSet=\u00a77Carcel {0} ha sido puesta
jumpError=Eso es demasiado para tu ordenador!
kickDefault=Echado del servidor.
kickExempt=\u00a7cNo puedes echar a esa persona.
kill=\u00a77ha matado a {0}.
kitError=\u00a7cNo hay ningun kit valido.
kitError2=\u00a7cEse kit no existe o esta mal escrito.
kitErrorHelp=\u00a7cPerhaps an item is missing a quantity in the configuration?
kitGive=\u00a77Dando kit a {0}.
kitInvFull=\u00a7cTu inventario esta lleno, su kit se pondra en el suelo
kitTimed=\u00a7c No puedes usar ese kit de nuevo para otro{0}.
kits=\u00a77Kits: {0}
lightningSmited=\u00a77Acabas de ser golpeado
lightningUse=\u00a77Golpeando a {0}
loadWarpError=Error al cargar el tenetransporte {0}
loadinfo=Cargado {0}, construido {1} por: {2}
localFormat=Local: <{0}> {1}
mailClear=\u00a7cPara marcar tu email como leido, escribe /mail clear
mailCleared=\u00a77Email limpiado!
mailSent=\u00a77Email enviado!!
markMailAsRead=\u00a7cPara marcar tu email como leido, escribe /mail clear
markedAsAway=\u00a77Has sido puesto como AFK.
markedAsNotAway=\u00a77Ya no estas AFK.
maxHomes=No puedes establecer mas de {0} hogares.
mayNotJail=\u00a7cNo puedes encarcelar a esa persona
me=yo
minute=minuto
minutes=minutos
missingItems=No tienes {0}x de {1}.
missingPrefixSuffix=Falta un prefijo o un sufijo para {0}
mobSpawnError=Error al cambiar la localizacion para el nacimiento de los mobs.
mobSpawnLimit=Cantidad de Mobs limitados al limite del server
mobSpawnTarget=El block seleccionado sera el lugar donde van a nacer los mobs.
mobsAvailable=\u00a77Mobs: {0}
moneyRecievedFrom=\u00a7a{0} ha sido recivido de {1}
moneySentTo=\u00a7a{0} ha sido enviado a {1}
moneyTaken={0} han sido sacados de tu cuenta bancaria.
month=mes
months=meses
moreThanZero=Las cantidades han de ser mayores que 0.
msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
muteExempt=\u00a7cNo puedes silenciar a ese jugador.
mutedPlayer=Player {0} silenciado.
mutedPlayerFor=Player {0} silenciado durante {1}.
mutedUserSpeaks={0} intento hablar, pero esta silenciado.
needTpohere=Necesitas acceso a /tpohere para teletransportar a otros jugadores.
negativeBalanceError=El usuario no tiene permitido tener un saldo negativo.
nickChanged=Nombre de jugador cambiado.
nickDisplayName=\u00a77Tienes que habilitar cambio de nombre de usuario en la configuracion de Essentials.
nickInUse=\u00a7cEse nombre ya esta en uso.
nickNamesAlpha=\u00a7cLos nombres tienen que ser alfanumericos.
nickNoMore=\u00a77Ya no tienes un nombre de usuario
nickOthersPermission=\u00a7cNo tienes permiso para cambiar el nombre de usuario de otros.
nickSet=\u00a77Tu nombre es ahora \u00a7c{0}
noAccessCommand=\u00a7cNo tienes acceso a ese comando.
noAccessPermission=\u00a7cNo tienes permisos para hacer eso {0}.
noDestroyPermission=\u00a7cNo tienes permisos para destrozar eso {0}.
noHelpFound=\u00a7cNo hay comandos relacionados.
noHomeSet=No has establecido un hogar.
noHomeSetPlayer=El jugador no ha establecido un hogar.
noKitPermission=\u00a7cNecesitas los \u00a7c{0}\u00a7c permisos para usar ese kit.
noKits=\u00a77No hay kits disponibles todavia
noMail=No tienes ningun email recivido
noMailSendPerm=\u00a7cNo tienes el permiso de \u00a7fessentials.mail.send\u00a7c.
noMotd=\u00a7cNo hay ningun mensaje del dia.
noNewMail=\u00a77No tienes ningun correo nuevo.
noPendingRequest=No tienes ninguna peticion pendiente.
noPlacePermission=\u00a7cNo tienes permiso para situar ese bloque en ese lugar.
noPowerTools=You have no power tools assigned.
noRules=\u00a7cNo hay reglas especificadas todavia.
noWarpsDefined=No hay teletransportes definidos aun
none=ninguno
notAllowedToQuestion=\u00a7cYou estas autorizado para usar las preguntas.
notAllowedToShout=\u00a7cNo estas autorizado para gritar.
notEnoughMoney=No tienes el dinero suficiente.
notRecommendedBukkit=La version de bukkit no es la recomendada para esta version de Essentials.
notSupportedYet=No esta soportado aun.
now=ahora
numberRequired=Un numero es necesario, amigo.
onlyDayNight=/time solo soporta day/night. (dia/noche)
onlyPlayers=Solo los jugadores conectados pueden usar {0}.
onlySunStorm=/weather solo soporta sun/storm. (sol/tormenta)
pTimeCurrent=\u00a7e{0}''s\u00a7f la hora es {1}.
pTimeCurrentFixed=\u00a7e{0}''s\u00a7f la hora ha sido cambiada a {1}.
pTimeNormal=\u00a7e{0}''s\u00a7f el tiempo es normal y coincide con el servidor.
pTimeOthersPermission=\u00a7cNo estas autorizado para especificar'' la hora de otros usuarios.
pTimePlayers=Estos usuarios tienen su propia hora:
pTimeReset=La hora del usuario ha sido reiniciada a las: \u00a7e{0}
pTimeSet=La hora del jugador ha sido cambiada para las: \u00a73{0}\u00a7f for: \u00a7e{1}
pTimeSetFixed=La hora del jugador ha sido arreglada para las: \u00a73{0}\u00a7f for: \u00a7e{1}
parseError=error analizando {0} en la linea {1}
pendingTeleportCancelled=\u00a7cPeticion de teletransporte pendiente cancelado.
permissionsError=Falta el plugin Permissions/GroupManager; Los prefijos/sufijos de chat seran desactivados.
playerBanned=\u00a7cEl jugador {0} ha baneado a {1} durante {2}
playerInJail=\u00a7cEl jugador {0} ya esta en la carcel.
playerJailed=\u00a77Jugador {0} encarcelado.
playerJailedFor= \u00a77El jugador {0} ha sido encarcelado durante {1}.
playerKicked=\u00a7cEl jugador {0} echo a {1} durante {2}
playerMuted=\u00a77Has sido silenciado
playerMutedFor=\u00a77Has sido silenciado durante {0}
playerNeverOnServer=\u00a7cEl jugador {0} nunca estuvo en este servidor.
playerNotFound=\u00a7cJugador no encontrado.
playerUnmuted=\u00a77Has sido desmuteado.
pong=Tkm mi ninio!
possibleWorlds=\u00a77Los mundos posibles son desde el numero 0 hasta el {0}.
powerToolAir=El comando no se puede ejecutar en el aire.
powerToolAlreadySet=El comando \u00a7c{0}\u00a7f ya esta asignado a {1}.
powerToolAttach=\u00a7c{0}\u00a7f comando asignado a {1}.
powerToolClearAll=Todos los comandos de powertool han sido borrados.
powerToolList={1} tiene los siguientes comandos: \u00a7c{0}\u00a7f.
powerToolListEmpty={0} no tiene comandos asignados.
powerToolNoSuchCommandAssigned=El comando \u00a7c{0}\u00a7f no ha sido asignado a {1}.
powerToolRemove=Comando \u00a7c{0}\u00a7f borrado desde {1}.
powerToolRemoveAll=Todos los comandos borrados desde {0}.
powerToolsDisabled=All of your power tools have been disabled.
powerToolsEnabled=All of your power tools have been enabled.
protectionOwner=\u00a76[EssentialsProtect] Due&ntilde;o de la proteccion: {0}
questionFormat=\u00a77[Pregunta]\u00a7f {0}
reloadAllPlugins=\u00a77Todos los plugins recargados.
repair=Has reparado satisfactoriamente tu: \u00a7e{0}.
repairAlreadyFixed=\u00a77Este objeto no necesita de reparado.
repairInvalidType=\u00a7cEste objeto no puede ser reparado.
repairNone=No habia objetos que necesitasen ser reparados.
requestAccepted=\u00a77Peticion de teletransporte aceptada.
requestAcceptedFrom=\u00a77{0} acepto tu peticion de teletransporte.
requestDenied=\u00a77Peticion de teletransporte denegada.
requestDeniedFrom=\u00a77{0} ha denegado tu peticion de teletransporte.
requestSent=\u00a77Peticion enviada a {0}\u00a77.
returnPlayerToJailError=Error al intentar quitar al jugador de la carcel.
second=segundo
seconds=segundos
seenOffline=El jugador {0} esta desconectado desde {1}
seenOnline=El jugador {0} lleva conectado desde {1}
serverFull=Servidor lleno
setSpawner=Cambiado tipo de lugar de nacimiento a {0}
sheepMalformedColor=Color malformado.
shoutFormat=\u00a77[Shout]\u00a7f {0}
signFormatFail=\u00a74[{0}]
signFormatSuccess=\u00a71[{0}]
signFormatTemplate=[{0}]
signProtectInvalidLocation=\u00a74No puedes poner carteles en ese sitio.
similarWarpExist=Ya existe un teletransporte con ese nombre.
slimeMalformedSize=Medidas malformadas.
soloMob=A este mob le gusta estar solo
spawnSet=\u00a77El lugar de nacimiento ha sido puesto para el grupo {0}.
spawned=nacido
suicideMessage=\u00a77Adios mundo cruel...
suicideSuccess= \u00a77{0} se quito su propia vida
survival=survival
takenFromAccount=\u00a7c{0} ha sido sacado de tu cuenta.
takenFromOthersAccount=\u00a7c{0} ha sido sacado de la cuenta de {1}.
teleportAAll=\u00a77Peticion de teletransporte enviada a todos los jugadores...
teleportAll=\u00a77Teletransportando a todos los jugadores...
teleportAtoB=\u00a77{0}\u00a77 te teletransporto a {1}\u00a77.
teleportDisabled={0} tiene desactivado los teletransportes.
teleportHereRequest=\u00a7c{0}\u00a7c ha pedido que te teletransportes con el.
teleportNewPlayerError=Error al teletransportar al nuevo jugador
teleportRequest=\u00a7c{0}\u00a7c te ha pedido teletransportarse contigo.
teleportTop=\u00a77Teletransportandote a la cima.
teleportationCommencing=\u00a77Comenzando teletransporte...
teleportationDisabled=\u00a77Teletransporte desactivado.
teleportationEnabled=\u00a77Teletransporte activado.
teleporting=\u00a77Teletransportando...
teleportingPortal=\u00a77Teletransportando via portal.
tempBanned=Baneado temporalmente del servidor por {0}
tempbanExempt=\u00a77No puedes banear temporalmente a ese jugador
thunder= Tu has {0} los truenos en tu mundo.
thunderDuration=Tu has {0} los truenos en tu mundo durante {1} seconds.
timeBeforeHeal=Tiempo antes de la siguiente curacion: {0}
timeBeforeTeleport=Tiempo antes del proximo teletransporte: {0}
timeFormat=\u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f
timePattern=(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)?
timeSet=Time establecido en todos los mundos.
timeSetPermission=\u00a7cNo estas autorizado para establecer la hora.
timeWorldCurrent=La hora actual en {0} es \u00a73{1}
timeWorldSet=La hora ha sido establecido a {0} en: \u00a7c{1}
tradeCompleted=\u00a77Intercambio completado.
tradeSignEmpty=Esta tienda no tiene nada disponible para ti.
tradeSignEmptyOwner=No hay nada que recojer de esta tienda.
treeFailure=\u00a7cError al generar arbol. Prueba de nuevo en tierra o hierba.
treeSpawned=\u00a77Arbol puesto.
true=true
typeTpaccept=\u00a77Para teletransportarte, escribe \u00a7c/tpaccept\u00a77.
typeTpdeny=\u00a77Para denegar esta peticion, escribe \u00a7c/tpdeny\u00a77.
typeWorldName=\u00a77Tu tambien puedes escribir el nombre de un mundo especifico.
unableToSpawnMob=No se puede generar Mobs.
unbannedIP=IP Adress desbaneada.
unbannedPlayer=Jugador desbaneado.
unignorePlayer=Ya no estas ignorando al jugador {0}.
unknownItemId=ID de objeto desconocido: {0}
unknownItemInList=Objeto desconocido {0} en {1} lista.
unknownItemName=Nombre de objeto desconocido: {0}
unlimitedItemPermission=\u00a7cNo tienes permiso para objetos ilimitados {0}.
unlimitedItems=Objetos ilimitados.
unmutedPlayer=Jugador {0} desmuteado.
upgradingFilesError=Error mientras se actualizaban los archivos
userDoesNotExist=El usuario {0} no existe
userIsAway={0} esta ahora ausente!
userIsNotAway={0} ya no esta ausente!
userJailed=\u00a77Has sido encarcelado!
userUsedPortal={0} uso un portal de salida existente.
userdataMoveBackError=Error al mover userdata/{0}.tmp a userdata/{1}
userdataMoveError=Error al mover userdata/{0} a userdata/{1}.tmp
usingTempFolderForTesting=Usando carpeta temporal para pruebas:
versionMismatch=La version no coincide! Por favor actualiza {0} a la misma version.
versionMismatchAll=La version no coincide! Por favor actualiza todos los jars de Essentials a la misma version.
voiceSilenced=\u00a77Tu voz ha sido silenciada
warpDeleteError=Problema al borrar el archivo de teletransporte.
warpListPermission=\u00a7cNo tienes permiso para listar esos teletransportes.
warpNotExist=Ese teletransporte no existe.
warpSet=\u00a77Teletransporte {0} establecido.
warpUsePermission=\u00a7cNo tienes permisos para usar ese teletransporte.
warpingTo=\u00a77Teletransportandote a {0}.
warps=Warps: {0}
warpsCount=\u00a77Hay {0} teletransportes. Mostrando pagina {1} de {2}.
weatherStorm=\u00a77Has establecido el tiempo a tormenta en este mundo.
weatherStormFor=\u00a77Has establecido el tiempo a tormenta en este {1} durante {0} segundos.
weatherSun=\u00a77Has establecido el tiempo a sol en este mundo.
weatherSunFor=\u00a77Has establecido el tiempo a sol en este {1} durante {0} segundos.
whoisGamemode=\u00a79 - Gamemode: {0}
whoisGeoLocation=\u00a79 - Localizacion: {0}
whoisGod=\u00a79 - God mode: {0}
whoisHealth=\u00a79 - Salud: {0}/20
whoisIPAddress=\u00a79 - Direccion IP: {0}
whoisIs={0} es {1}
whoisLocation=\u00a79 - Localizacion: ({0}, {1}, {2}, {3})
whoisMoney=\u00a79 - Dinero: {0}
whoisOP=\u00a79 - OP: {0}
whoisStatusAvailable=\u00a79 - Estado: Disponible
whoisStatusAway=\u00a79 - Status: \u00a7cAusente\u00a7f
worth=\u00a77Pila de {0} con valor de \u00a7c{1}\u00a77 ({2} objeto(s) a {3} cada uno)
worthMeta=\u00a77Pila de {0} con metadata de {1} , con valor de \u00a7c{2}\u00a77 ({3} objeto(s) a {4} cada uno)
worthSet=Establecer el valor de un valor
year=a&ntilde;o
years=a&ntilde;os
youAreHealed=\u00a77Has sido curado.
youHaveNewMail=\u00a7cTienes {0} mensajes!\u00a7f Pon \u00a77/mail read\u00a7f para ver tus emails no leidos!.

View File

@@ -2,372 +2,377 @@
# Single quotes have to be doubled: '' # Single quotes have to be doubled: ''
# Translations start here # Translations start here
# by: # by:
addedToAccount = \u00a7a{0} a \u00e9t\u00e9 rajout\u00e9 a votre compte. action=* {0} {1}
addedToOthersAccount = \u00a7a{0} a \u00e9t\u00e9 ajout\u00e9 \u00e0 {1} compte. addedToAccount=\u00a7a{0} a \u00e9t\u00e9 rajout\u00e9 a votre compte.
alertBroke = a cass\u00e9: addedToOthersAccount=\u00a7a{0} a \u00e9t\u00e9 ajout\u00e9 \u00e0 {1} compte.
alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} \u00e0:{3} alertBroke=a cass\u00e9:
alertPlaced = a plac\u00e9: alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} \u00e0:{3}
alertUsed = a utilis\u00e9: alertPlaced=a plac\u00e9:
alertUsed=a utilis\u00e9:
autoAfkKickReason=You have been kicked for idling more than {0} minutes. autoAfkKickReason=You have been kicked for idling more than {0} minutes.
backAfterDeath = \u00a77Utilisez la commande /back pour retourner \u00e0 l''endroit ou vous \u00eates mort. backAfterDeath=\u00a77Utilisez la commande /back pour retourner \u00e0 l''endroit ou vous \u00eates mort.
backUsageMsg = \u00a77Retour a votre emplacement pr\u00e9c\u00e8dent. backUsageMsg=\u00a77Retour a votre emplacement pr\u00e9c\u00e8dent.
backupFinished = Backup termin\u00e9 backupFinished=Backup termin\u00e9
backupStarted = D\u00e9but du backup backupStarted=D\u00e9but du backup
balance = \u00a77Solde: {0} balance=\u00a77Solde: {0}
balanceTop = \u00a77 Top {0} soldes balanceTop=\u00a77 Top {0} soldes
banExempt = \u00a77Vous ne pouvez pas interdire ce joueur. banExempt=\u00a77Vous ne pouvez pas interdire ce joueur.
banIpAddress = \u00a77Adresse IP banni banIpAddress=\u00a77Adresse IP banni
bannedIpsFileError = Erreur de lecture de banned-ips.txt bannedIpsFileError=Erreur de lecture de banned-ips.txt
bannedIpsFileNotFound = Fichier banned-ips.txt introuvable bannedIpsFileNotFound=Fichier banned-ips.txt introuvable
bannedPlayersFileError = Erreur lors de la lecture de banned-players.txt bannedPlayersFileError=Erreur lors de la lecture de banned-players.txt
bannedPlayersFileNotFound = banned-players.txt introuvable. bannedPlayersFileNotFound=banned-players.txt introuvable.
bigTreeFailure = \u00a7c\u00c9chec de la g\u00e9n\u00e9ration du gros arbre. Essayez de nouveau sur de la terre ou de l''herbe. bigTreeFailure=\u00a7c\u00c9chec de la g\u00e9n\u00e9ration du gros arbre. Essayez de nouveau sur de la terre ou de l''herbe.
bigTreeSuccess = \u00a77Gros arbre cr\u00e9e. bigTreeSuccess=\u00a77Gros arbre cr\u00e9e.
broadcast = [\u00a7cMessage\u00a7f]\u00a7a {0} broadcast=[\u00a7cMessage\u00a7f]\u00a7a {0}
buildAlert = \u00a7cVous n''avez pas la permission de construire. buildAlert=\u00a7cVous n''avez pas la permission de construire.
bukkitFormatChanged = Le format de la version de Bukkit a \u00e9t\u00e9 chang\u00e9. La version n''a pas \u00e9t\u00e9 v\u00e9rifi\u00e9e. bukkitFormatChanged=Le format de la version de Bukkit a \u00e9t\u00e9 chang\u00e9. La version n''a pas \u00e9t\u00e9 v\u00e9rifi\u00e9e.
burnMsg = \u00a77Vous avez enflamm\u00e9 {0} pour {1} seconde(s). burnMsg=\u00a77Vous avez enflamm\u00e9 {0} pour {1} seconde(s).
canTalkAgain = \u00a77Vous pouvez de nouveau parler. canTalkAgain=\u00a77Vous pouvez de nouveau parler.
cantFindGeoIpDB = N''arrive pas \u00e0 trouver la base de donn\u00e9es GeoIP! cantFindGeoIpDB=N''arrive pas \u00e0 trouver la base de donn\u00e9es GeoIP!
cantReadGeoIpDB = Echec de la lecture de la base de donn\u00e9s GeoIP! cantReadGeoIpDB=Echec de la lecture de la base de donn\u00e9s GeoIP!
cantSpawnItem = \u00a7cVous n''avez pas le droit de faire apparaitre {0} cantSpawnItem=\u00a7cVous n''avez pas le droit de faire apparaitre {0}
commandFailed = \u00c9chec de la commande {0}: commandFailed=\u00c9chec de la commande {0}:
commandHelpFailedForPlugin=Erreur d'obtention d'aider \u00e0: {0} commandHelpFailedForPlugin=Erreur d'obtention d'aider \u00e0: {0}
commandNotLoaded = \u00a7cLa commande {0} a \u00e9t\u00e9 mal charg\u00e9e. commandNotLoaded=\u00a7cLa commande {0} a \u00e9t\u00e9 mal charg\u00e9e.
compassBearing = \u00a77Orientation: {0} ({1} degr\u00e9s). compassBearing=\u00a77Orientation: {0} ({1} degr\u00e9s).
configFileMoveError = \u00c9chec du d\u00e9placement de config.yml vers l''emplacement de backup. configFileMoveError=\u00c9chec du d\u00e9placement de config.yml vers l''emplacement de backup.
configFileRenameError = \u00c9chec du changement de nom du fichier temp de config.yml configFileRenameError=\u00c9chec du changement de nom du fichier temp de config.yml
connectedPlayers = Joueurs connect\u00e9s: connectedPlayers=Joueurs connect\u00e9s:
connectionFailed = \u00c9chec de l''ouverture de la connexion. connectionFailed=\u00c9chec de l''ouverture de la connexion.
cooldownWithMessage = \u00a7cRefroidissement: {0} cooldownWithMessage=\u00a7cRefroidissement: {0}
corruptNodeInConfig = \u00a74Annonce: Votre fichier de configuration a un {0} n\u0153ud corrompu. corruptNodeInConfig=\u00a74Annonce: Votre fichier de configuration a un {0} n\u0153ud corrompu.
couldNotFindTemplate = Le mod\u00e8le {0} est introuvable couldNotFindTemplate=Le mod\u00e8le {0} est introuvable
creatingConfigFromTemplate = Cr\u00e9ation de la configuration \u00e0 partir du mod\u00e8le : {0} creatingConfigFromTemplate=Cr\u00e9ation de la configuration \u00e0 partir du mod\u00e8le : {0}
creatingEmptyConfig = Cr\u00e9ation d''une configuration vierge : {0} creatingEmptyConfig=Cr\u00e9ation d''une configuration vierge : {0}
creatingPortal = Cr\u00e9ation d''un portail \u00e0 {0},{1},{2}. creative=creative
day = jour day=jour
days = jours days=jours
defaultBanReason = Le marteau du ban a frapp\u00e9! defaultBanReason=Le marteau du ban a frapp\u00e9!
deleteFileError = Le fichier n''a pas pu \u00eatre supprim\u00e9: {0} deleteFileError=Le fichier n''a pas pu \u00eatre supprim\u00e9: {0}
deleteHome = \u00a77Home {0} has been removed. deleteHome=\u00a77Home {0} has been removed.
deleteJail = \u00a77La prison {0} a \u00e9t\u00e9 supprim\u00e9e. deleteJail=\u00a77La prison {0} a \u00e9t\u00e9 supprim\u00e9e.
deleteWarp = \u00a77Warp {0} supprim\u00e9. deleteWarp=\u00a77Warp {0} supprim\u00e9.
deniedAccessCommand = L''acc\u00e8s \u00e0 la commande a \u00e9t\u00e9 refus\u00e9 pour {0}. deniedAccessCommand=L''acc\u00e8s \u00e0 la commande a \u00e9t\u00e9 refus\u00e9 pour {0}.
dependancyDownloaded = [Essentials] Fichier {0} correctement t\u00e9l\u00e9charg\u00e9. dependancyDownloaded=[Essentials] Fichier {0} correctement t\u00e9l\u00e9charg\u00e9.
dependancyException = [Essentials] Une erreur est survenue lors de la tentative de t\u00e9l\u00e9chargement dependancyException=[Essentials] Une erreur est survenue lors de la tentative de t\u00e9l\u00e9chargement
dependancyNotFound = [Essentials] Une d\u00e9pendance requise n''a pas \u00e9t\u00e9 trouv\u00e9e, t\u00e9l\u00e9chargement en cours. dependancyNotFound=[Essentials] Une d\u00e9pendance requise n''a pas \u00e9t\u00e9 trouv\u00e9e, t\u00e9l\u00e9chargement en cours.
depth = \u00a77Vous \u00eates au niveau de la mer. depth=\u00a77Vous \u00eates au niveau de la mer.
depthAboveSea = \u00a77Vous \u00eates \u00e0 {0} bloc(s) au-dessus du niveau de la mer. depthAboveSea=\u00a77Vous \u00eates \u00e0 {0} bloc(s) au-dessus du niveau de la mer.
depthBelowSea = \u00a77Vous \u00eates \u00e0 {0} bloc(s) en-dessous du niveau de la mer. depthBelowSea=\u00a77Vous \u00eates \u00e0 {0} bloc(s) en-dessous du niveau de la mer.
destinationNotSet = Destination non d\u00e9finie destinationNotSet=Destination non d\u00e9finie
disableUnlimited = \u00a77D\u00e9sactivation du placement illimit\u00e9 de {0} pour {1}. disableUnlimited=\u00a77D\u00e9sactivation du placement illimit\u00e9 de {0} pour {1}.
disabled = d\u00e9sactiv\u00e9 disabled=d\u00e9sactiv\u00e9
dontMoveMessage = \u00a77La t\u00e9l\u00e9portation commence dans {0}. Ne bougez pas. dontMoveMessage=\u00a77La t\u00e9l\u00e9portation commence dans {0}. Ne bougez pas.
downloadingGeoIp = T\u00e9l\u00e9chargement de la base de donn\u00e9es GeoIP ... cela peut prendre un moment (campagne : 0.6 Mo, ville : 20Mo) downloadingGeoIp=T\u00e9l\u00e9chargement de la base de donn\u00e9es GeoIP ... cela peut prendre un moment (campagne : 0.6 Mo, ville : 20Mo)
duplicatedUserdata = Donn\u00e9e utilisateur dupliqu\u00e9e: {0} et {1} duplicatedUserdata=Donn\u00e9e utilisateur dupliqu\u00e9e: {0} et {1}
enableUnlimited = \u00a77Donner un nombre illimit\u00e9 de {0} \u00e0 {1}. enableUnlimited=\u00a77Donner un nombre illimit\u00e9 de {0} \u00e0 {1}.
enabled = activ\u00e9 enabled=activ\u00e9
errorCallingCommand = Erreur en appelant la commande /{0} errorCallingCommand=Erreur en appelant la commande /{0}
errorWithMessage = \u00a7cErreur: {0} errorWithMessage=\u00a7cErreur: {0}
essentialsReload = \u00a77Essentials Recharg\u00e9 {0} essentialsReload=\u00a77Essentials Recharg\u00e9 {0}
extinguish = \u00a77Vous vous \u00eates \u00e9teint. extinguish=\u00a77Vous vous \u00eates \u00e9teint.
extinguishOthers = \u00a77Vous avez \u00e9teint {0}. extinguishOthers=\u00a77Vous avez \u00e9teint {0}.
failedToCloseConfig = Echec de la fermeture de la configuration {0} failedToCloseConfig=Echec de la fermeture de la configuration {0}
failedToCreateConfig = Echec de la cr\u00e9ation de la configuration {0} failedToCreateConfig=Echec de la cr\u00e9ation de la configuration {0}
failedToWriteConfig = \u00c9chec de l''\u00e9criture de la configuration {0} failedToWriteConfig=\u00c9chec de l''\u00e9criture de la configuration {0}
fileRenameError = Echec du changement de nom de {0}. false=false
foreverAlone = \u00a7cVous n''avez personne \u00e0 qui r\u00e9pondre. fileRenameError=Echec du changement de nom de {0}.
freedMemory = A lib\u00e9r\u00e9 {0} Mo. foreverAlone=\u00a7cVous n''avez personne \u00e0 qui r\u00e9pondre.
gcchunks = chunks, freedMemory=A lib\u00e9r\u00e9 {0} Mo.
gcentities = entit\u00e9s gameMode=\u00a77Set game mode {0} for {1}.
gcfree = Free memory: {0} Mo gcchunks=chunks,
gcmax = M\u00e9moire maximale: {0} Mo gcentities=entit\u00e9s
gctotal = Allocated memory: {0} Mo gcfree=Free memory: {0} Mo
generatingPortal = \u00a77G\u00e9n\u00e9ration d''un portail de sortie. gcmax=M\u00e9moire maximale: {0} Mo
geoIpUrlEmpty = L''url de t\u00e9l\u00e9chargement de GeoIP est vide. gctotal=Allocated memory: {0} Mo
geoIpUrlInvalid = L''url de t\u00e9l\u00e9chargement de GeoIP est invalide. geoIpUrlEmpty=L''url de t\u00e9l\u00e9chargement de GeoIP est vide.
geoipJoinFormat = Joueur {0} vient de {1} geoIpUrlInvalid=L''url de t\u00e9l\u00e9chargement de GeoIP est invalide.
godDisabledFor = d\u00e9sactive pour {0} geoipJoinFormat=Joueur {0} vient de {1}
godEnabledFor = activ\u00e9 pour {0} godDisabledFor=d\u00e9sactive pour {0}
godMode = \u00a77Mode Dieu {0}. godEnabledFor=activ\u00e9 pour {0}
haveBeenReleased = \u00a77Vous avez \u00e9t\u00e9 lib\u00e9r\u00e9 godMode=\u00a77Mode Dieu {0}.
heal = \u00a77Vous avez \u00e9t\u00e9 soign\u00e9. haveBeenReleased=\u00a77Vous avez \u00e9t\u00e9 lib\u00e9r\u00e9
healOther = \u00a77{0} a \u00e9t\u00e9 soign\u00e9. heal=\u00a77Vous avez \u00e9t\u00e9 soign\u00e9.
helpConsole = Pour voir l''aide tapez ? healOther=\u00a77{0} a \u00e9t\u00e9 soign\u00e9.
helpOp = \u00a7c[Aide Admin]\u00a7f \u00a77{0}:\u00a7f {1} helpConsole=Pour voir l''aide tapez ?
helpPages = Page \u00a7c{0}\u00a7f sur \u00a7c{1}\u00a7f. helpOp=\u00a7c[Aide Admin]\u00a7f \u00a77{0}:\u00a7f {1}
holeInFloor = Trou dans le Sol. helpPages=Page \u00a7c{0}\u00a7f sur \u00a7c{1}\u00a7f.
homeSet = \u00a77Home d\u00e9fini. holeInFloor=Trou dans le Sol.
homeSetToBed = \u00a77Votre home est d\u00e9sormais d\u00e9fini sur ce lit. homeSet=\u00a77Home d\u00e9fini.
homes = Homes: {0} homeSetToBed=\u00a77Votre home est d\u00e9sormais d\u00e9fini sur ce lit.
hour = heure homes=Homes: {0}
hours = heures hour=heure
ignorePlayer = Vous ignorez d\u00e9sormais {0}. hours=heures
illegalDate = Format de date ill\u00e9gal. ignorePlayer=Vous ignorez d\u00e9sormais {0}.
infoChapter = S\u00e9lectionner le chapitre : illegalDate=Format de date ill\u00e9gal.
infoChapterPages = Chapitre {0}, page \u00a7c{1}\u00a7f sur \u00a7c{2}\u00a7f: infoChapter=S\u00e9lectionner le chapitre :
infoFileDoesNotExist = Le fichier info.txt n''existe pas. Le fichier est en cours de cr\u00e9ation pour vous. infoChapterPages=Chapitre {0}, page \u00a7c{1}\u00a7f sur \u00a7c{2}\u00a7f:
infoPages = Page \u00a7c{0}\u00a7f de \u00a7c{1}\u00a7f. infoFileDoesNotExist=Le fichier info.txt n''existe pas. Le fichier est en cours de cr\u00e9ation pour vous.
infoUnknownChapter = Chapitre inconnu. infoPages=Page \u00a7c{0}\u00a7f de \u00a7c{1}\u00a7f.
invBigger = Les inventaires des autres joueurs sont plus gros que le v\u00f4tre. infoUnknownChapter=Chapitre inconnu.
invRestored = Votre inventaire vous a \u00e9t\u00e9 rendu. invBigger=Les inventaires des autres joueurs sont plus gros que le v\u00f4tre.
invSee = Vous voyez l''inventaire de {0}. invRestored=Votre inventaire vous a \u00e9t\u00e9 rendu.
invSeeHelp = Utilisez /invsee pour voir l''inventaire de quelqu''un. invSee=Vous voyez l''inventaire de {0}.
invalidCharge = \u00a7cInvalide charge. invSeeHelp=Utilisez /invsee pour voir l''inventaire de quelqu''un.
invalidMob = Mauvias type de monstre. invalidCharge=\u00a7cInvalide charge.
invalidServer = Serveur non valide. invalidMob=Mauvias type de monstre.
invalidSignLine = La ligne {0} du panneau est invalide. invalidServer=Serveur non valide.
invalidWorld = \u00a7cMonde invalide. invalidSignLine=La ligne {0} du panneau est invalide.
inventoryCleared = \u00a77Inventaire nettoy\u00e9. invalidWorld=\u00a7cMonde invalide.
inventoryClearedOthers = \u00a77L''inventaire de \u00a7c{0}\u00a77 a \u00e9t\u00e9 nettoy\u00e9. inventoryCleared=\u00a77Inventaire nettoy\u00e9.
is = est inventoryClearedOthers=\u00a77L''inventaire de \u00a7c{0}\u00a77 a \u00e9t\u00e9 nettoy\u00e9.
itemCannotBeSold = Cet objet ne peut \u00eatre vendu au serveur. is=est
itemMustBeStacked = Cet objet doit \u00eatre vendu par 64. Une quantit\u00e9 de 2 serait deux fois 64. itemCannotBeSold=Cet objet ne peut \u00eatre vendu au serveur.
itemNotEnough1 = \u00a7cVous n''avez pas assez de cet objet pour le vendre. itemMustBeStacked=Cet objet doit \u00eatre vendu par 64. Une quantit\u00e9 de 2 serait deux fois 64.
itemNotEnough2 = \u00a77Si vous voulez vendre l''int\u00e9gralit\u00e9 de vos objets de ce type l\u00e0, utilisez /sell nomObjet itemNotEnough1=\u00a7cVous n''avez pas assez de cet objet pour le vendre.
itemNotEnough3 = \u00a77/sell nomObjet -1 vendra tout sauf un objet, etc. itemNotEnough2=\u00a77Si vous voulez vendre l''int\u00e9gralit\u00e9 de vos objets de ce type l\u00e0, utilisez /sell nomObjet
itemSellAir = Vous vouliez vraiment vendre de l''air? Mettez un objet dans votre main. itemNotEnough3=\u00a77/sell nomObjet -1 vendra tout sauf un objet, etc.
itemSold = \u00a77Vendu pour \u00a7c {0} \u00a77 ({1} objet(s) \u00e0 {2} chacun) itemSellAir=Vous vouliez vraiment vendre de l''air? Mettez un objet dans votre main.
itemSoldConsole = {0} vendu {1} pour \u00a77 {2} \u00a77 ({3} objet(s) \u00e0 {4} chacun) itemSold=\u00a77Vendu pour \u00a7c{0} \u00a77({1} {2} \u00e0 {3} chacun)
itemSpawn = \u00a77Donne {0} de {1} itemSoldConsole={0} vendu {1} pour \u00a77{2} \u00a77({3} objet(s) \u00e0 {4} chacun)
itemsCsvNotLoaded = N''a pas pu charger items.csv. itemSpawn=\u00a77Donne {0} de {1}
jailAlreadyIncarcerated = \u00a7cPerson is already in jail: {0} itemsCsvNotLoaded=N''a pas pu charger items.csv.
jailMessage = \u00a7cVous avez commis un crime, vous en payez le prix. jailAlreadyIncarcerated=\u00a7cPerson is already in jail: {0}
jailNotExist = Cette prison n''existe pas. jailMessage=\u00a7cVous avez commis un crime, vous en payez le prix.
jailReleased = \u00a77Player \u00a7e{0}\u00a77 unjailed. jailNotExist=Cette prison n''existe pas.
jailReleasedPlayerNotify = \u00a77You have been released! jailReleased=\u00a77Player \u00a7e{0}\u00a77 unjailed.
jailSentenceExtended = Jail time extend to: {0) jailReleasedPlayerNotify=\u00a77You have been released!
jailSet = \u00a77La prison {0} a \u00e9t\u00e9 cr\u00e9\u00e9. jailSentenceExtended=Jail time extend to: {0)
jumpError = \u00c7a aurait pu faire mal au cerveau de votre ordinateur. jailSet=\u00a77La prison {0} a \u00e9t\u00e9 cr\u00e9\u00e9.
kickDefault = Kick\u00e9 du serveur jumpError=\u00c7a aurait pu faire mal au cerveau de votre ordinateur.
kickExempt = \u00a77Vous ne pouvez pas lancer ce joueur. kickDefault=Kick\u00e9 du serveur
kill = \u00a77Tu\u00e9 {0}. kickExempt=\u00a77Vous ne pouvez pas lancer ce joueur.
kitError = \u00a7cIl n''y a pas de kits valides. kill=\u00a77Tu\u00e9 {0}.
kitError2 = \u00a7cCe kit n''existe pas ou a \u00e9t\u00e9 mal d\u00e9fini. kitError=\u00a7cIl n''y a pas de kits valides.
kitErrorHelp = \u00a7cPeut-\u00eatre qu''un objet manque d''une quantit\u00e9 dans la configuration? kitError2=\u00a7cCe kit n''existe pas ou a \u00e9t\u00e9 mal d\u00e9fini.
kitGive = \u00a77Donner le kit {0}. kitErrorHelp=\u00a7cPeut-\u00eatre qu''un objet manque d''une quantit\u00e9 dans la configuration?
kitInvFull = \u00a7cVotre inventaire \u00e9tait plein, le kit est Parre-terre. kitGive=\u00a77Donner le kit {0}.
kitTimed = \u00a7cVous ne pouvez pas utiliser ce kit pendant encore {0}. kitInvFull=\u00a7cVotre inventaire \u00e9tait plein, le kit est Parre-terre.
kits = \u00a77Kits:{0} kitTimed=\u00a7cVous ne pouvez pas utiliser ce kit pendant encore {0}.
lightningSmited = \u00a77Vous venez d''\u00eatre foudroy\u00e9 kits=\u00a77Kits:{0}
lightningUse = \u00a77{0} a \u00e9t\u00e9 foudroy\u00e9 lightningSmited=\u00a77Vous venez d''\u00eatre foudroy\u00e9
loadWarpError = \u00c9chec du chargement du warp {0} lightningUse=\u00a77{0} a \u00e9t\u00e9 foudroy\u00e9
loadinfo = {0} version {1} par {2} a \u00e9t\u00e9 charg\u00e9 loadWarpError=\u00c9chec du chargement du warp {0}
localFormat = Local:<{0}> {1} loadinfo={0} version {1} par {2} a \u00e9t\u00e9 charg\u00e9
mailClear = \u00a7cPour marquer votre courrier en tant que lu, entrez /mail clear localFormat=Local:<{0}> {1}
mailCleared = \u00a77Mail supprim\u00e9 ! mailClear=\u00a7cPour marquer votre courrier en tant que lu, entrez /mail clear
mailSent = \u00a77Courrier envoy\u00e9 ! mailCleared=\u00a77Mail supprim\u00e9 !
markMailAsRead = \u00a7cPour marquer votre courrier en tant que lu, entrez /mail clear mailSent=\u00a77Courrier envoy\u00e9 !
markedAsAway = \u00a77Vous \u00eates d\u00e9sormais AFK. markMailAsRead=\u00a7cPour marquer votre courrier en tant que lu, entrez /mail clear
markedAsNotAway = \u00a77Vous n''\u00eates d\u00e9sormais plus AFK. markedAsAway=\u00a77Vous \u00eates d\u00e9sormais AFK.
markedAsNotAway=\u00a77Vous n''\u00eates d\u00e9sormais plus AFK.
maxHomes=You cannot set more than {0} homes. maxHomes=You cannot set more than {0} homes.
mayNotJail = \u00a7cVous ne pouvez pas emprisonner cette personne. mayNotJail=\u00a7cVous ne pouvez pas emprisonner cette personne.
me = moi me=moi
minute = minute minute=minute
minutes = minutes minutes=minutes
missingItems = Vous n''avez pas {0} x {1}. missingItems=Vous n''avez pas {0} x {1}.
missingPrefixSuffix = Pr\u00e9fixe ou Suffixe manquant pour {0} missingPrefixSuffix=Pr\u00e9fixe ou Suffixe manquant pour {0}
mobSpawnError = Erreur lors du changement du spawner de monstres. mobSpawnError=Erreur lors du changement du spawner de monstres.
mobSpawnLimit = Quantit\u00e9 de monstres limit\u00e9 \u00e0 la limite du serveur. mobSpawnLimit=Quantit\u00e9 de monstres limit\u00e9 \u00e0 la limite du serveur.
mobSpawnTarget = Le bloc cible doit \u00eatre un spawner de monstres. mobSpawnTarget=Le bloc cible doit \u00eatre un spawner de monstres.
moneyRecievedFrom = \u00a7a{0} a \u00e9t\u00e9 re\u00e7u de {1} mobsAvailable=\u00a77Mobs: {0}
moneySentTo = \u00a7a{0} a \u00e9t\u00e9 envoy\u00e9 \u00e0 {1} moneyRecievedFrom=\u00a7a{0} a \u00e9t\u00e9 re\u00e7u de {1}
moneyTaken = {0} pr\u00e9lev\u00e9(s) de votre compte bancaire. moneySentTo=\u00a7a{0} a \u00e9t\u00e9 envoy\u00e9 \u00e0 {1}
month = mois moneyTaken={0} pr\u00e9lev\u00e9(s) de votre compte bancaire.
months = mois month=mois
moreThanZero = Les Quantit\u00e9s doivent \u00eatre sup\u00e9rieures \u00e0 z\u00e9ro. months=mois
msgFormat = \u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2} moreThanZero=Les Quantit\u00e9s doivent \u00eatre sup\u00e9rieures \u00e0 z\u00e9ro.
muteExempt = \u00a7cYou may not mute that player. msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
mutedPlayer = Le joueur {0} est d\u00e9sormais muet. muteExempt=\u00a7cYou may not mute that player.
mutedPlayerFor = {0} a \u00e9t\u00e9 mute pour {1}. mutedPlayer=Le joueur {0} est d\u00e9sormais muet.
mutedUserSpeaks = {0} a essay\u00e9 de parler mais est muet. mutedPlayerFor={0} a \u00e9t\u00e9 mute pour {1}.
needTpohere = Vous avez besoin de l''acc\u00e8s \u00e0 /tpohere pour t\u00e9l\u00e9porter d''autres joueurs. mutedUserSpeaks={0} a essay\u00e9 de parler mais est muet.
negativeBalanceError = L''utilisateur n''est pas autoris\u00e9 \u00e0 avoir un solde n\u00e9gatif. needTpohere=Vous avez besoin de l''acc\u00e8s \u00e0 /tpohere pour t\u00e9l\u00e9porter d''autres joueurs.
nickChanged = Pseudo modifi\u00e9. negativeBalanceError=L''utilisateur n''est pas autoris\u00e9 \u00e0 avoir un solde n\u00e9gatif.
nickChanged=Pseudo modifi\u00e9.
nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickDisplayName=\u00a77You have to enable change-displayname in Essentials config.
nickInUse = \u00a7cCe nom est d\u00e9j\u00e0 utilis\u00e9. nickInUse=\u00a7cCe nom est d\u00e9j\u00e0 utilis\u00e9.
nickNamesAlpha = \u00a7cLes pseudos doivent \u00eatre alphanum\u00e9riques. nickNamesAlpha=\u00a7cLes pseudos doivent \u00eatre alphanum\u00e9riques.
nickNoMore = \u00a7Vous n''avez plus de surnom. nickNoMore=\u00a7Vous n''avez plus de surnom.
nickOthersPermission = \u00a7cVous n''avez pas la permission de changer le pseudo des autres. nickOthersPermission=\u00a7cVous n''avez pas la permission de changer le pseudo des autres.
nickSet = \u00a77Votre pseudo est maintenant \u00a7c{0} nickSet=\u00a77Votre pseudo est maintenant \u00a7c{0}
noAccessCommand = \u00a7cVous n''avez pas acc\u00e8s \u00e0 cette commande. noAccessCommand=\u00a7cVous n''avez pas acc\u00e8s \u00e0 cette commande.
noAccessPermission = \u00a7cVous n''avez pas la permissions d''acc\u00e9der \u00e0 cette {0} noAccessPermission=\u00a7cVous n''avez pas la permissions d''acc\u00e9der \u00e0 cette {0}
noDestroyPermission = \u00a7cVous n''avez pas la permission de d\u00e9truire ce {0}. noDestroyPermission=\u00a7cVous n''avez pas la permission de d\u00e9truire ce {0}.
noHelpFound = \u00a7cNo matching commands. noHelpFound=\u00a7cNo matching commands.
noHomeSet = Vous n''avez pas d\u00e9fini de home. noHomeSet=Vous n''avez pas d\u00e9fini de home.
noHomeSetPlayer = Le joueur n''a pas d\u00e9fini son home. noHomeSetPlayer=Le joueur n''a pas d\u00e9fini son home.
noKitPermission = \u00a7cVous avez besoin de la permission \u00a7c{0}\u00a7c pour utiliser ce kit. noKitPermission=\u00a7cVous avez besoin de la permission \u00a7c{0}\u00a7c pour utiliser ce kit.
noKits = \u00a77Il n''y a pas encore de kits disponibles. noKits=\u00a77Il n''y a pas encore de kits disponibles.
noMail = Vous n''avez pas de courrier noMail=Vous n''avez pas de courrier
noMailSendPerm = \u00a7cVous n''avez pas la permission \u00a7fessentials.mail.send\u00a7c. noMailSendPerm=\u00a7cVous n''avez pas la permission \u00a7fessentials.mail.send\u00a7c.
noMotd = \u00a7cIl n''y a pas de message su jour. noMotd=\u00a7cIl n''y a pas de message su jour.
noNewMail = \u00a77Vous n''avez pas de courrier. noNewMail=\u00a77Vous n''avez pas de courrier.
noPendingRequest = Vous n''avez pas de requ\u00eate non lue. noPendingRequest=Vous n''avez pas de requ\u00eate non lue.
noPlacePermission = \u00a7cYou do not have permission to place a block near that sign. noPlacePermission=\u00a7cYou do not have permission to place a block near that sign.
noPowerTools=You have no power tools assigned. noPowerTools=You have no power tools assigned.
noRules = \u00a7cIl n''y a pas encore de r\u00e8gles d\u00e9finies. noRules=\u00a7cIl n''y a pas encore de r\u00e8gles d\u00e9finies.
noWarpsDefined = Aucun warps d\u00e9finis. noWarpsDefined=Aucun warps d\u00e9finis.
none = aucun none=aucun
notAllowedToQuestion = \u00a7cVous n''\u00eates pas autoris\u00e9 \u00e0 poser des questions. notAllowedToQuestion=\u00a7cVous n''\u00eates pas autoris\u00e9 \u00e0 poser des questions.
notAllowedToShout = \u00a7cVous n''\u00eates pas autoris\u00e9 \u00e0 crier. notAllowedToShout=\u00a7cVous n''\u00eates pas autoris\u00e9 \u00e0 crier.
notEnoughMoney = Vous n''avez pas les fonds n\u00e9cessaires. notEnoughMoney=Vous n''avez pas les fonds n\u00e9cessaires.
notRecommendedBukkit = La version de Bukkit n''est pas celle qui est recommand\u00e9 pour cette version de Essentials. notRecommendedBukkit=La version de Bukkit n''est pas celle qui est recommand\u00e9 pour cette version de Essentials.
notSupportedYet = Pas encore pris en charge. notSupportedYet=Pas encore pris en charge.
now = maintenant now=maintenant
numberRequired = On a besoin d''un nombre ici, idiot. numberRequired=On a besoin d''un nombre ici, idiot.
onlyDayNight = /time ne supporte que (jour) day/night (nuit). onlyDayNight=/time ne supporte que (jour) day/night (nuit).
onlyPlayers = Seulement les joueurs en jeu peuvent utiliser {0}. onlyPlayers=Seulement les joueurs en jeu peuvent utiliser {0}.
onlySunStorm = /weather only supports sun/storm. onlySunStorm=/weather only supports sun/storm.
pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
pTimePlayers = These players have their own time: pTimePlayers=These players have their own time:
pTimeReset = Player time has been reset for: \u00a7e{0} pTimeReset=Player time has been reset for: \u00a7e{0}
pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
parseError = Erreur de conversion {0} \u00e0 la ligne {1} parseError=Erreur de conversion {0} \u00e0 la ligne {1}
pendingTeleportCancelled = \u00a7cRequete de t\u00e9l\u00e9portation annul\u00e9e. pendingTeleportCancelled=\u00a7cRequete de t\u00e9l\u00e9portation annul\u00e9e.
permissionsError = Permissions/GroupManager manquant, les pr\u00e9fixes et suffixes ne seront pas affich\u00e9s. permissionsError=Permissions/GroupManager manquant, les pr\u00e9fixes et suffixes ne seront pas affich\u00e9s.
playerBanned = \u00a7cPlayer {0} banned {1} for {2} playerBanned=\u00a7cPlayer {0} banned {1} for {2}
playerInJail = \u00a7cLe joueur est d\u00e9j\u00e0 dans la prison {0}. playerInJail=\u00a7cLe joueur est d\u00e9j\u00e0 dans la prison {0}.
playerJailed = \u00a77Le joueur {0} a \u00e9t\u00e9 emprisonn\u00e9. playerJailed=\u00a77Le joueur {0} a \u00e9t\u00e9 emprisonn\u00e9.
playerJailedFor = \u00a77{0} a \u00e9t\u00e9 emprisonn\u00e9 pour {1}. playerJailedFor=\u00a77{0} a \u00e9t\u00e9 emprisonn\u00e9 pour {1}.
playerKicked = \u00a7cPlayer {0} kicked {1} for {2} playerKicked=\u00a7cPlayer {0} kicked {1} for {2}
playerMuted = \u00a77You have been muted playerMuted=\u00a77You have been muted
playerMutedFor = \u00a77You have been muted for {0} playerMutedFor=\u00a77You have been muted for {0}
playerNeverOnServer = \u00a7cLe joueur {0} n''a jamais \u00e9t\u00e9 sur le serveur. playerNeverOnServer=\u00a7cLe joueur {0} n''a jamais \u00e9t\u00e9 sur le serveur.
playerNotFound = \u00a7cLe joueur est introuvable. playerNotFound=\u00a7cLe joueur est introuvable.
playerUnmuted = \u00a77You have been unmuted playerUnmuted=\u00a77You have been unmuted
pong = Pong! pong=Pong!
possibleWorlds = \u00a77Les mondes possibles sont les nombres 0 par {0}. possibleWorlds=\u00a77Les mondes possibles sont les nombres 0 par {0}.
powerToolAir = La commande ne peut pas \u00eatre attach\u00e9e \u00e0 l''air. powerToolAir=La commande ne peut pas \u00eatre attach\u00e9e \u00e0 l''air.
powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. powerToolAlreadySet=Command \u00a7c{0}\u00a7f is already assigned to {1}.
powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. powerToolAttach=\u00a7c{0}\u00a7f command assigned to {1}.
powerToolClearAll = All powertool commands have been cleared. powerToolClearAll=All powertool commands have been cleared.
powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. powerToolList={1} has the following commands: \u00a7c{0}\u00a7f.
powerToolListEmpty = {0} has no commands assigned. powerToolListEmpty={0} has no commands assigned.
powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. powerToolNoSuchCommandAssigned=Command \u00a7c{0}\u00a7f has not been assigned to {1}.
powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemove=Command \u00a7c{0}\u00a7f removed from {1}.
powerToolRemoveAll = All commands removed from {0}. powerToolRemoveAll=All commands removed from {0}.
powerToolsEnabled=All of your power tools have been enabled.
powerToolsDisabled=All of your power tools have been disabled. powerToolsDisabled=All of your power tools have been disabled.
protectionOwner = \u00a76[EssentialsProtect] Propri\u00e9taire de la protection : {0} powerToolsEnabled=All of your power tools have been enabled.
questionFormat = \u00a77[Question]\u00a7f {0} protectionOwner=\u00a76[EssentialsProtect] Propri\u00e9taire de la protection : {0}
reloadAllPlugins = \u00a77Tous les plugins ont \u00e9t\u00e9 recharg\u00e9s. questionFormat=\u00a77[Question]\u00a7f {0}
repair = You have successfully repaired your: \u00a7e{0}. reloadAllPlugins=\u00a77Tous les plugins ont \u00e9t\u00e9 recharg\u00e9s.
repairAlreadyFixed = \u00a77This item does not need repairing. repair=You have successfully repaired your: \u00a7e{0}.
repairInvalidType = \u00a7cThis item cannot be repaired. repairAlreadyFixed=\u00a77This item does not need repairing.
repairNone = There were no items that needing repairing. repairInvalidType=\u00a7cThis item cannot be repaired.
requestAccepted = \u00a77Demande de t\u00e9l\u00e9portation accept\u00e9e. repairNone=There were no items that needing repairing.
requestAcceptedFrom = \u00a77{0} accepted your teleport request. requestAccepted=\u00a77Demande de t\u00e9l\u00e9portation accept\u00e9e.
requestDenied = \u00a77Demande de t\u00e9l\u00e9portation refus\u00e9e. requestAcceptedFrom=\u00a77{0} accepted your teleport request.
requestDeniedFrom = \u00a77{0} denied your teleport request. requestDenied=\u00a77Demande de t\u00e9l\u00e9portation refus\u00e9e.
requestSent = \u00a77Requ\u00eate envoy\u00e9e \u00e0 {0}\u00a77. requestDeniedFrom=\u00a77{0} denied your teleport request.
returnPlayerToJailError = Erreur survenue lors de la tentative d''emprisonner de nouveau un joueur. requestSent=\u00a77Requ\u00eate envoy\u00e9e \u00e0 {0}\u00a77.
second = seconde returnPlayerToJailError=Erreur survenue lors de la tentative d''emprisonner de nouveau un joueur.
seconds = secondes second=seconde
seenOffline = Le joueur {0} est hors ligne depuis {1} seconds=secondes
seenOnline = Le joueur {0} est en ligne depuis {1} seenOffline=Le joueur {0} est hors ligne depuis {1}
serverFull = Le serveur est plein. seenOnline=Le joueur {0} est en ligne depuis {1}
setSpawner = Changed spawner type to {0} serverFull=Le serveur est plein.
sheepMalformedColor = Couleur mal form\u00e9e. setSpawner=Changed spawner type to {0}
shoutFormat = \u00a77[Crie]\u00a7f {0} sheepMalformedColor=Couleur mal form\u00e9e.
signFormatFail = \u00a74[{0}] shoutFormat=\u00a77[Crie]\u00a7f {0}
signFormatSuccess = \u00a71[{0}] signFormatFail=\u00a74[{0}]
signFormatTemplate = [{0}] signFormatSuccess=\u00a71[{0}]
signProtectInvalidLocation = \u00a74You are not allowed to create sign here. signFormatTemplate=[{0}]
similarWarpExist = Un warp avec un nom similaire existe d\u00e9j\u00e0. signProtectInvalidLocation=\u00a74You are not allowed to create sign here.
slimeMalformedSize = Taille mal form\u00e9e. similarWarpExist=Un warp avec un nom similaire existe d\u00e9j\u00e0.
soloMob = Ce monstre aime \u00eatre seul. slimeMalformedSize=Taille mal form\u00e9e.
spawnSet = \u00a77Le point de spawn a \u00e9t\u00e9 d\u00e9fini pour le groupe {0}. soloMob=Ce monstre aime \u00eatre seul.
spawned = spawn\u00e9 spawnSet=\u00a77Le point de spawn a \u00e9t\u00e9 d\u00e9fini pour le groupe {0}.
suicideMessage = \u00a77Au revoir monde cruel... spawned=spawn\u00e9
suicideSuccess = \u00a77{0} a pris sa propre vie. suicideMessage=\u00a77Au revoir monde cruel...
takenFromAccount = \u00a7c{0} ont \u00e9t\u00e9 pris de votre compte. suicideSuccess=\u00a77{0} a pris sa propre vie.
takenFromOthersAccount = \u00a7c{0} a \u00e9t\u00e9 prise de {1} compte. survival=survival
teleportAAll = \u00a77Teleporting request sent to all players... takenFromAccount=\u00a7c{0} ont \u00e9t\u00e9 pris de votre compte.
teleportAll = \u00a77T\u00e9l\u00e9poration de tous les joueurs. takenFromOthersAccount=\u00a7c{0} a \u00e9t\u00e9 prise de {1} compte.
teleportAtoB = \u00a77{0}\u00a77 vous a t\u00e9l\u00e9port\u00e9 \u00e0 {1}\u00a77. teleportAAll=\u00a77Teleporting request sent to all players...
teleportDisabled = {0} a la t\u00e9l\u00e9portation d\u00e9sactiv\u00e9. teleportAll=\u00a77T\u00e9l\u00e9poration de tous les joueurs.
teleportHereRequest = \u00a7c{0}\u00a7c Vous a demand\u00e9 de vous t\u00e9l\u00e9porter \u00e0 lui/elle. teleportAtoB=\u00a77{0}\u00a77 vous a t\u00e9l\u00e9port\u00e9 \u00e0 {1}\u00a77.
teleportNewPlayerError = \u00c9chec de la t\u00e9l\u00e9portation du nouveau joueur. teleportDisabled={0} a la t\u00e9l\u00e9portation d\u00e9sactiv\u00e9.
teleportRequest = \u00a7c{0}\u00a7c vous demande s''il peut se t\u00e9l\u00e9porter sur vous. teleportHereRequest=\u00a7c{0}\u00a7c Vous a demand\u00e9 de vous t\u00e9l\u00e9porter \u00e0 lui/elle.
teleportTop = \u00a77T\u00e9l\u00e9portation vers le haut. teleportNewPlayerError=\u00c9chec de la t\u00e9l\u00e9portation du nouveau joueur.
teleportationCommencing = \u00a77D\u00e9but de la t\u00e9l\u00e9portation.... teleportRequest=\u00a7c{0}\u00a7c vous demande s''il peut se t\u00e9l\u00e9porter sur vous.
teleportationDisabled = \u00a77T\u00e9l\u00e9poration d\u00e9sactiv\u00e9. teleportTop=\u00a77T\u00e9l\u00e9portation vers le haut.
teleportationEnabled = \u00a77T\u00e9l\u00e9portation activ\u00e9e. teleportationCommencing=\u00a77D\u00e9but de la t\u00e9l\u00e9portation....
teleporting = \u00a77T\u00e9l\u00e9poration en cours... teleportationDisabled=\u00a77T\u00e9l\u00e9poration d\u00e9sactiv\u00e9.
teleportingPortal = \u00a77T\u00e9l\u00e9portation via portail. teleportationEnabled=\u00a77T\u00e9l\u00e9portation activ\u00e9e.
tempBanned = Banni temporairement du serveur pour {0} teleporting=\u00a77T\u00e9l\u00e9poration en cours...
tempbanExempt = \u00a77You may not tempban that player teleportingPortal=\u00a77T\u00e9l\u00e9portation via portail.
thunder = Vous avez {0} la foudre dans votre monde. tempBanned=Banni temporairement du serveur pour {0}
thunderDuration = Vous avez {0} la foudre dans le serveur {1} secondes. tempbanExempt=\u00a77You may not tempban that player
timeBeforeHeal = Temps avant le prochain soin : {0} thunder=Vous avez {0} la foudre dans votre monde.
timeBeforeTeleport = Temps avant prochaine t\u00e9l\u00e9portation {0} thunderDuration=Vous avez {0} la foudre dans le serveur {1} secondes.
timeFormat = \u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f timeBeforeHeal=Temps avant le prochain soin : {0}
timePattern = (?:([0-9]+)\\\\s*[ya][a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*mo[a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*(?:sem|w)[a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*[dj][a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*h[a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*m[a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*(?:s[a-z]*)?)? timeBeforeTeleport=Temps avant prochaine t\u00e9l\u00e9portation {0}
timeSet = Heure modifi\u00e9e dans tous les mondes. timeFormat=\u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f
timeSetPermission = \u00a7cYou are not authorized to set the time. timePattern=(?:([0-9]+)\\\\s*[ya][a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*mo[a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*(?:sem|w)[a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*[dj][a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*h[a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*m[a-z]*[,\\\\s]*)?(?:([0-9]+)\\\\s*(?:s[a-z]*)?)?
timeWorldCurrent = The current time in {0} is \u00a73{1} timeSet=Heure modifi\u00e9e dans tous les mondes.
timeWorldSet = The time was set to {0} in: \u00a7c{1} timeSetPermission=\u00a7cYou are not authorized to set the time.
tradeCompleted = \u00a77\u00c9change termin\u00e9. timeWorldCurrent=The current time in {0} is \u00a73{1}
tradeSignEmpty = Le panneau de vente n''as pas encore assez de stock. timeWorldSet=The time was set to {0} in: \u00a7c{1}
tradeSignEmptyOwner = There is nothing to collect from this trade sign. tradeCompleted=\u00a77\u00c9change termin\u00e9.
treeFailure = \u00a7cEchec de la g\u00e9n\u00e9ration de l''arbre. Essayez de nouveau sur de l''herbe ou de la terre. tradeSignEmpty=Le panneau de vente n''as pas encore assez de stock.
treeSpawned = \u00a77Arbre cr\u00e9\u00e9. tradeSignEmptyOwner=There is nothing to collect from this trade sign.
typeTpaccept = \u00a77Pour le t\u00e9l\u00e9porter, tapez \u00a7c/tpaccept\u00a77. treeFailure=\u00a7cEchec de la g\u00e9n\u00e9ration de l''arbre. Essayez de nouveau sur de l''herbe ou de la terre.
typeTpdeny = \u00a77Pour d\u00e9cliner cette demande, entrez \u00a7c/tpdeny\u00a77. treeSpawned=\u00a77Arbre cr\u00e9\u00e9.
typeWorldName = \u00a77Vous pouvez aussi taper le nom d''un monde sp\u00e9cifique. true=true
unableToSpawnMob = Incapable de spawner un monstre. typeTpaccept=\u00a77Pour le t\u00e9l\u00e9porter, tapez \u00a7c/tpaccept\u00a77.
unbannedIP = Adresse IP d\u00e9banni. typeTpdeny=\u00a77Pour d\u00e9cliner cette demande, entrez \u00a7c/tpdeny\u00a77.
unbannedPlayer = Joueur d\u00e9banni. typeWorldName=\u00a77Vous pouvez aussi taper le nom d''un monde sp\u00e9cifique.
unignorePlayer = Vous n''ignorez plus {0}. unableToSpawnMob=Incapable de spawner un monstre.
unknownItemId = Num\u00e9ro d''objet inconnu : {0} unbannedIP=Adresse IP d\u00e9banni.
unknownItemInList = L''objet {0} est inconnu dans la liste {1}. unbannedPlayer=Joueur d\u00e9banni.
unknownItemName = Nom d''objet inconnu : {0} unignorePlayer=Vous n''ignorez plus {0}.
unlimitedItemPermission = \u00a7cPas de permission pour l''objet illimit\u00e9 {0}. unknownItemId=Num\u00e9ro d''objet inconnu : {0}
unlimitedItems = Objets illimit\u00e9s: unknownItemInList=L''objet {0} est inconnu dans la liste {1}.
unmutedPlayer = Le joueur {0} n''est plus muet. unknownItemName=Nom d''objet inconnu : {0}
upgradingFilesError = Erreur durant la mise \u00e0 jour des fichiers. unlimitedItemPermission=\u00a7cPas de permission pour l''objet illimit\u00e9 {0}.
userCreatedPortal = {0} a utilis\u00e9 un portail et a g\u00e9n\u00e9r\u00e9 un portail de sortie. unlimitedItems=Objets illimit\u00e9s:
userDoesNotExist = L''utilisateur {0} n''existe pas. unmutedPlayer=Le joueur {0} n''est plus muet.
userIsAway = {0} s''est mis en AFK upgradingFilesError=Erreur durant la mise \u00e0 jour des fichiers.
userIsNotAway = {0} n''est plus inactif userDoesNotExist=L''utilisateur {0} n''existe pas.
userJailed = \u00a77Vous avez \u00e9t\u00e9 emprisonn\u00e9 userIsAway={0} s''est mis en AFK
userUsedPortal = {0} a utilis\u00e9 un portail existant. userIsNotAway={0} n''est plus inactif
userdataMoveBackError = Echec du d\u00e9placement de userdata/{0}.tmp \u00e0 userdata/{1} userJailed=\u00a77Vous avez \u00e9t\u00e9 emprisonn\u00e9
userdataMoveError = Echec du d\u00e9placement de userdata/{0} \u00e0 userdata/{1}.tmp userUsedPortal={0} a utilis\u00e9 un portail existant.
usingPortal = \u00a77T\u00e9l\u00e9portation via portail vers un portail existant. userdataMoveBackError=Echec du d\u00e9placement de userdata/{0}.tmp \u00e0 userdata/{1}
usingTempFolderForTesting = Utilise un fichier temporaire pour un test. userdataMoveError=Echec du d\u00e9placement de userdata/{0} \u00e0 userdata/{1}.tmp
versionMismatch = Versions diff\u00e9rentes! Mettez s''il vous pla\u00eet {0} \u00e0 la m\u00eame version. usingTempFolderForTesting=Utilise un fichier temporaire pour un test.
versionMismatchAll = Mauvaise version! S''il vous plait mettez des jars Essentiels de version identique. versionMismatch=Versions diff\u00e9rentes! Mettez s''il vous pla\u00eet {0} \u00e0 la m\u00eame version.
voiceSilenced = \u00a77Votre voix a \u00e9t\u00e9 r\u00e9duite au silence versionMismatchAll=Mauvaise version! S''il vous plait mettez des jars Essentiels de version identique.
warpDeleteError = Probl\u00e8me concernant la suppression du fichier warp. voiceSilenced=\u00a77Votre voix a \u00e9t\u00e9 r\u00e9duite au silence
warpListPermission = \u00a7cVous n''avez pas la permission d''afficher la liste des warps. warpDeleteError=Probl\u00e8me concernant la suppression du fichier warp.
warpNotExist = Ce warp n''existe pas. warpListPermission=\u00a7cVous n''avez pas la permission d''afficher la liste des warps.
warpSet = \u00a77Le warp {0} a \u00e9t\u00e9 cr\u00e9\u00e9. warpNotExist=Ce warp n''existe pas.
warpUsePermission = \u00a7cVous n''avez pas la permission d''utiliser ce warp. warpSet=\u00a77Le warp {0} a \u00e9t\u00e9 cr\u00e9\u00e9.
warpingTo = \u00a77T\u00e9l\u00e9portation au warp {0}. warpUsePermission=\u00a7cVous n''avez pas la permission d''utiliser ce warp.
warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warpingTo=\u00a77T\u00e9l\u00e9portation au warp {0}.
weatherStorm = \u00a77Vous avez d\u00e9fini l''orage dans {0} warps=Warps: {0}
weatherStormFor = \u00a77Vous avez d\u00e9fini l''orage dans {0} pour {1} secondes. warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
weatherSun = \u00a77Vous avez mis le beau temps dans {0} weatherStorm=\u00a77Vous avez d\u00e9fini l''orage dans {0}
weatherSunFor = \u00a77Vous avez mis le beau temps dans {0} pour {1} secondes. weatherStormFor=\u00a77Vous avez d\u00e9fini l''orage dans {0} pour {1} secondes.
whoisGeoLocation = \u00a79 - Emplacement: {0} weatherSun=\u00a77Vous avez mis le beau temps dans {0}
whoisHealth = \u00a79 - Vie: {0} / 20 weatherSunFor=\u00a77Vous avez mis le beau temps dans {0} pour {1} secondes.
whoisIPAddress = \u00a79 - Adresse IP: {0} whoisGamemode=\u00a79 - Gamemode: {0}
whoisIs = {0} est {1} whoisGeoLocation=\u00a79 - Emplacement: {0}
whoisLocation = \u00a79 - Emplacement: ({0}, {1}, {2}, {3}) whoisGod=\u00a79 - God mode: {0}
whoisMoney = \u00a79 - Argent: {0} whoisHealth=\u00a79 - Vie: {0} / 20
whoisStatusAvailable = \u00a79 - Statut: Disponible whoisIPAddress=\u00a79 - Adresse IP: {0}
whoisStatusAway = \u00a79 - Statut: \u00a7cAilleurs\u00a7f whoisIs={0} est {1}
worth = \u00a77Un stack de {0} vaut \u00a7c{1}\u00a77 ({2} objet(s) \u00e0 {3} chacun) whoisLocation=\u00a79 - Emplacement: ({0}, {1}, {2}, {3})
worthMeta = \u00a77Un stack de {0} avec la m\u00e9tadonn\u00e9e de {1} vaut \u00a7c{2}\u00a77 ({3} objet(s) \u00e0 {4} chacun) whoisMoney=\u00a79 - Argent: {0}
worthSet = Valeur cr\u00e9e whoisOP=\u00a79 - OP: {0}
year = ann\u00e9e whoisStatusAvailable=\u00a79 - Statut: Disponible
years = ann\u00e9es whoisStatusAway=\u00a79 - Statut: \u00a7cAilleurs\u00a7f
youAreHealed = \u00a77Vous avez \u00e9t\u00e9 soign\u00e9. worth=\u00a77Un stack de {0} vaut \u00a7c{1}\u00a77 ({2} objet(s) \u00e0 {3} chacun)
youHaveNewMail = \u00a7cVous avez {0} messages! \u00a7fEntrez \u00a77/mail read\u00a7f pour voir votre courrier. worthMeta=\u00a77Un stack de {0} avec la m\u00e9tadonn\u00e9e de {1} vaut \u00a7c{2}\u00a77 ({3} objet(s) \u00e0 {4} chacun)
worthSet=Valeur cr\u00e9e
year=ann\u00e9e
years=ann\u00e9es
youAreHealed=\u00a77Vous avez \u00e9t\u00e9 soign\u00e9.
youHaveNewMail=\u00a7cVous avez {0} messages! \u00a7fEntrez \u00a77/mail read\u00a7f pour voir votre courrier.

View File

@@ -2,372 +2,377 @@
# Single quotes have to be doubled: '' # Single quotes have to be doubled: ''
# Translations start here # Translations start here
# by: Geertje123 # by: Geertje123
addedToAccount = \u00a7a{0} is gestort op je account. action=* {0} {1}
addedToOthersAccount = \u00a7a{0} is overgemaakt naar {1}''s rekening addedToAccount=\u00a7a{0} is gestort op je account.
alertBroke = gebroken: addedToOthersAccount=\u00a7a{0} is overgemaakt naar {1}''s rekening
alertFormat = \u00a73[{0}] \u00a7f {1} \u00a76 {2} bij: {3} alertBroke=gebroken:
alertPlaced = geplaatst: alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} bij: {3}
alertUsed = gebruikt: alertPlaced=geplaatst:
alertUsed=gebruikt:
autoAfkKickReason=You have been kicked for idling more than {0} minutes. autoAfkKickReason=You have been kicked for idling more than {0} minutes.
backAfterDeath = \u00a77Gebruik het /back command om terug te keren naar je sterfplaats. backAfterDeath=\u00a77Gebruik het /back command om terug te keren naar je sterfplaats.
backUsageMsg = \u00a77Naar de vorige locatie aan het gaan. backUsageMsg=\u00a77Naar de vorige locatie aan het gaan.
backupFinished = Backup voltooid backupFinished=Backup voltooid
backupStarted = Backup gestart backupStarted=Backup gestart
balance = \u00a77Saldo: {0} balance=\u00a77Saldo: {0}
balanceTop = \u00a77 Top {0} saldi balanceTop=\u00a77 Top {0} saldi
banExempt = \u00a77Je kunt deze speler niet verbannen. banExempt=\u00a77Je kunt deze speler niet verbannen.
banIpAddress = \u00a77Verbannen IP-adres banIpAddress=\u00a77Verbannen IP-adres
bannedIpsFileError = Fout bij het lezen van banned-ips.txt bannedIpsFileError=Fout bij het lezen van banned-ips.txt
bannedIpsFileNotFound = banned-ips.txt werd niet gevonden bannedIpsFileNotFound=banned-ips.txt werd niet gevonden
bannedPlayersFileError = Fout bij het lezen van banned-players.txt bannedPlayersFileError=Fout bij het lezen van banned-players.txt
bannedPlayersFileNotFound = banned-players.txt werd niet gevonden bannedPlayersFileNotFound=banned-players.txt werd niet gevonden
bigTreeFailure = \u00a7cMaken van een grote boom is mislukt. Probeer het opnieuw op gras of dirt. bigTreeFailure=\u00a7cMaken van een grote boom is mislukt. Probeer het opnieuw op gras of dirt.
bigTreeSuccess = \u00a77Grote boom gemaakt. bigTreeSuccess= \u00a77Grote boom gemaakt.
broadcast = [\u00a7cBroadcast\u00a7f]\u00a7a {0} broadcast=[\u00a7cBroadcast\u00a7f]\u00a7a {0}
buildAlert = \u00a7cJe bent niet bevoegd om te bouwen buildAlert=\u00a7cJe bent niet bevoegd om te bouwen
bukkitFormatChanged = Bukkit versie formaat veranderd. Versie niet nagekeken. bukkitFormatChanged=Bukkit versie formaat veranderd. Versie niet nagekeken.
burnMsg = \u00a77Je hebt {0} voor {1} seconde(n) in de fik gezet. burnMsg=\u00a77Je hebt {0} voor {1} seconde(n) in de fik gezet.
canTalkAgain = \u00a77Je kan weer praten. canTalkAgain=\u00a77Je kan weer praten.
cantFindGeoIpDB = De GeoIP database kon niet gevonden worden! cantFindGeoIpDB=De GeoIP database kon niet gevonden worden!
cantReadGeoIpDB = Fout bij het lezen van de GeoIP database! cantReadGeoIpDB=Fout bij het lezen van de GeoIP database!
cantSpawnItem = \u00a7cJe bent niet bevoegd om {0} te spawnen. cantSpawnItem=\u00a7cJe bent niet bevoegd om {0} te spawnen.
commandFailed = Opdracht {0} mislukt: commandFailed=Opdracht {0} mislukt:
commandHelpFailedForPlugin=Fout bij het \u200b\u200bkrijgen van hulp voor: {0} commandHelpFailedForPlugin=Fout bij het \u200b\u200bkrijgen van hulp voor: {0}
commandNotLoaded = \u00a7cOpdracht {0} is fout geladen. commandNotLoaded=\u00a7cOpdracht {0} is fout geladen.
compassBearing = \u00a77Ligging: {0} ({1} graden). compassBearing=\u00a77Ligging: {0} ({1} graden).
configFileMoveError = Het verplaatsen van config.yml naar de backup locatie is mislukt. configFileMoveError=Het verplaatsen van config.yml naar de backup locatie is mislukt.
configFileRenameError = Fout bij het hernoemen van de tijdelijke map naar config.yml configFileRenameError=Fout bij het hernoemen van de tijdelijke map naar config.yml
connectedPlayers = Spelers online: connectedPlayers=Spelers online:
connectionFailed = Fout bij het verbinden. connectionFailed=Fout bij het verbinden.
cooldownWithMessage = \u00a7cAfkoeltijd: {0} cooldownWithMessage=\u00a7cAfkoeltijd: {0}
corruptNodeInConfig = \u00a74Waarschuwing: Het configuratiebestand bevat een fout {0}. corruptNodeInConfig=\u00a74Waarschuwing: Het configuratiebestand bevat een fout {0}.
couldNotFindTemplate = Het sjabloon kon niet worden gevonden {0} couldNotFindTemplate=Het sjabloon kon niet worden gevonden {0}
creatingConfigFromTemplate = Bezig met aanmaken van een config vanaf sjabloon: {0} creatingConfigFromTemplate=Bezig met aanmaken van een config vanaf sjabloon: {0}
creatingEmptyConfig = Bezig met een lege config aanmaken: {0} creatingEmptyConfig=Bezig met een lege config aanmaken: {0}
creatingPortal = Bezig met cre\u00ebren van portal bij {0},{1},{2}. creative=creative
day = dag day=dag
days = dagen days=dagen
defaultBanReason = De Ban Hamer heeft gesproken! defaultBanReason=De Ban Hamer heeft gesproken!
deleteFileError = Het bestand kon niet verwijderd worden: {0} deleteFileError=Het bestand kon niet verwijderd worden: {0}
deleteHome = \u00a77Home {0} has been removed. deleteHome=\u00a77Home {0} has been removed.
deleteJail = \u00a77Gevangenis {0} is verwijderd. deleteJail=\u00a77Gevangenis {0} is verwijderd.
deleteWarp = \u00a77Warp {0} is verwijderd. deleteWarp=\u00a77Warp {0} is verwijderd.
deniedAccessCommand = {0} was de toegang verboden tot het commando. deniedAccessCommand={0} was de toegang verboden tot het commando.
dependancyDownloaded = [Essentials] Afhankelijkheid {0} succesvol gedownload. dependancyDownloaded=[Essentials] Afhankelijkheid {0} succesvol gedownload.
dependancyException = [Essentials] Er is een fout opgetreden bij het downloaden van de afhankelijkheid dependancyException=[Essentials] Er is een fout opgetreden bij het downloaden van de afhankelijkheid
dependancyNotFound = [Essentials] Een afhankelijkheid is niet gevonden. Start downloaden. dependancyNotFound=[Essentials] Een afhankelijkheid is niet gevonden. Start downloaden.
depth = \u00a77Je zit op zeeniveau. depth=\u00a77Je zit op zeeniveau.
depthAboveSea = \u00a77Je zit {0} blok(ken) boven zeeniveau. depthAboveSea=\u00a77Je zit {0} blok(ken) boven zeeniveau.
depthBelowSea = \u00a77Je zit {0} blok(ken) onder zeeniveau. depthBelowSea=\u00a77Je zit {0} blok(ken) onder zeeniveau.
destinationNotSet = Bestemming niet ingesteld destinationNotSet=Bestemming niet ingesteld
disableUnlimited = \u00a77Oneindig plaatsen van {0} uitgeschakeld voor {1}. disableUnlimited=\u00a77Oneindig plaatsen van {0} uitgeschakeld voor {1}.
disabled = uitgeschakeld disabled=uitgeschakeld
dontMoveMessage = \u00a77Beginnen met teleporteren in {0}. Niet bewegen. dontMoveMessage=\u00a77Beginnen met teleporteren in {0}. Niet bewegen.
downloadingGeoIp = Bezig met downloaden van GeoIP database ... Dit kan een tijdje duren (country: 0.6 MB, city: 20MB) downloadingGeoIp=Bezig met downloaden van GeoIP database ... Dit kan een tijdje duren (country: 0.6 MB, city: 20MB)
duplicatedUserdata = Dubbele userdata: {0} en {1}. duplicatedUserdata=Dubbele userdata: {0} en {1}.
enableUnlimited = \u00a77Oneindig aantal {0} aan {1} gegeven. enableUnlimited=\u00a77Oneindig aantal {0} aan {1} gegeven.
enabled = ingeschakeld enabled=ingeschakeld
errorCallingCommand = Fout bij het aanroepen van de opdracht /{0} errorCallingCommand=Fout bij het aanroepen van de opdracht /{0}
errorWithMessage = \u00a7cFout: {0} errorWithMessage=\u00a7cFout: {0}
essentialsReload = \u00a77Essentials is herladen {0} essentialsReload=\u00a77Essentials is herladen {0}
extinguish = \u00a77Je hebt jezelf geblust. extinguish=\u00a77Je hebt jezelf geblust.
extinguishOthers = \u00a77Je hebt {0} geblust. extinguishOthers=\u00a77Je hebt {0} geblust.
failedToCloseConfig = Fout bij het sluiten van config {0} failedToCloseConfig=Fout bij het sluiten van config {0}
failedToCreateConfig = Fout tijdens het aanmaken van config {0} failedToCreateConfig=Fout tijdens het aanmaken van config {0}
failedToWriteConfig = Fout bij het cre\u00ebren van config {0} failedToWriteConfig=Fout bij het cre\u00ebren van config {0}
fileRenameError = Hernoemen van {0} mislukt false=false
foreverAlone = \u00a7cJe hebt niemand waarnaar je kan reageren. fileRenameError=Hernoemen van {0} mislukt
freedMemory = {0} MB gelost. foreverAlone=\u00a7cJe hebt niemand waarnaar je kan reageren.
gcchunks = chunks, freedMemory={0} MB gelost.
gcentities = entities gameMode=\u00a77Set game mode {0} for {1}.
gcfree = Vrij geheugen: {0} MB gcchunks= chunks,
gcmax = Maximaal geheugen: {0} MB gcentities= entities
gctotal = Gealloceerd geheugen: {0} MB gcfree=Vrij geheugen: {0} MB
generatingPortal = \u00a77Uitgangs portal aan het cre\u00ebren. gcmax=Maximaal geheugen: {0} MB
geoIpUrlEmpty = GeoIP download url is leeg. gctotal=Gealloceerd geheugen: {0} MB
geoIpUrlInvalid = GeoIP download url is ongeldig. geoIpUrlEmpty=GeoIP download url is leeg.
geoipJoinFormat = Speler {0} komt uit {1} geoIpUrlInvalid=GeoIP download url is ongeldig.
godDisabledFor = uitgeschakeld voor {0} geoipJoinFormat=Speler {0} komt uit {1}
godEnabledFor = ingeschakeld voor {0} godDisabledFor=uitgeschakeld voor {0}
godMode = \u00a77God mode {0}. godEnabledFor=ingeschakeld voor {0}
haveBeenReleased = \u00a77Je bent bevrijdt godMode=\u00a77God mode {0}.
heal = \u00a77Je bent genezen. haveBeenReleased=\u00a77Je bent bevrijdt
healOther = \u00a77Je geneezde {0}. heal=\u00a77Je bent genezen.
helpConsole = type ? om de consolehelp weer te geven. healOther=\u00a77Je geneezde {0}.
helpOp = \u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1} helpConsole=type ? om de consolehelp weer te geven.
helpPages = Pagina \u00a7c{0}\u00a7f van de \u00a7c{1}\u00a7f: helpOp=\u00a7c[HelpOp]\u00a7f \u00a77{0}:\u00a7f {1}
holeInFloor = Gat in de vloer helpPages=Pagina \u00a7c{0}\u00a7f van de \u00a7c{1}\u00a7f:
homeSet = \u00a77Home ingesteld. holeInFloor=Gat in de vloer
homeSetToBed = \u00a77Je home is is nu verplaatst naar dit bed. homeSet=\u00a77Home ingesteld.
homes = Homes: {0} homeSetToBed=\u00a77Je home is is nu verplaatst naar dit bed.
hour = uur homes=Homes: {0}
hours = uren hour=uur
ignorePlayer = Je negeert {0} vanaf nu. hours=uren
illegalDate = Illegaal data formaat. ignorePlayer=Je negeert {0} vanaf nu.
infoChapter = Selecteer hoofdstuk: illegalDate=Illegaal data formaat.
infoChapterPages = Hoofdstuk {0}, Pagina \u00a7c{1}\u00a7f van de \u00a7c{2}\u00a7f: infoChapter=Selecteer hoofdstuk:
infoFileDoesNotExist = Bestand info.txt bestaat niet. Bezig met aanmaken. infoChapterPages=Hoofdstuk {0}, Pagina \u00a7c{1}\u00a7f van de \u00a7c{2}\u00a7f:
infoPages = Pagina \u00a7c{0}\u00a7f van de \u00a7c{1}\u00a7f: infoFileDoesNotExist=Bestand info.txt bestaat niet. Bezig met aanmaken.
infoUnknownChapter = Onbekend hoofdstuk. infoPages=Pagina \u00a7c{0}\u00a7f van de \u00a7c{1}\u00a7f:
invBigger = De inventory van de andere speler is groter dan die van jou. infoUnknownChapter=Onbekend hoofdstuk.
invRestored = Je inventory is hersteld. invBigger=De inventory van de andere speler is groter dan die van jou.
invSee = Je kijkt naar de inventory van {0}. invRestored=Je inventory is hersteld.
invSeeHelp = Type /invsee om je inventory te herstellen. invSee=Je kijkt naar de inventory van {0}.
invalidCharge = \u00a7cOngeldig te laden. invSeeHelp=Type /invsee om je inventory te herstellen.
invalidMob = Ongeldig mob type. invalidCharge=\u00a7cOngeldig te laden.
invalidServer = Ongeldige server! invalidMob=Ongeldig mob type.
invalidSignLine = Regel {0} op het bordje is ongeldig. invalidServer=Ongeldige server!
invalidWorld = \u00a7cOngeldige wereld. invalidSignLine=Regel {0} op het bordje is ongeldig.
inventoryCleared = \u00a77inventory leeggemaakt. invalidWorld=\u00a7cOngeldige wereld.
inventoryClearedOthers = \u00a77inventory van \u00a7c{0}\u00a77 leeggemaakt. inventoryCleared=\u00a77inventory leeggemaakt.
is = is inventoryClearedOthers=\u00a77inventory van \u00a7c{0}\u00a77 leeggemaakt.
itemCannotBeSold = Dat voorwerp kan niet aan de server worden verkocht. is=is
itemMustBeStacked = Voorwerp moet geruild worden als stapel. Een hoeveelheid van 2 moet dus geruild worden als twee stapels, etc. itemCannotBeSold=Dat voorwerp kan niet aan de server worden verkocht.
itemNotEnough1 = \u00a7cJe hebt niet genoeg van dat voorwerp om te verkopen. itemMustBeStacked=Voorwerp moet geruild worden als stapel. Een hoeveelheid van 2 moet dus geruild worden als twee stapels, etc.
itemNotEnough2 = \u00a77Type /sell itemname Als je alles daarvan wilt verkopen itemNotEnough1=\u00a7cJe hebt niet genoeg van dat voorwerp om te verkopen.
itemNotEnough3 = \u00a77/sell itemname -1 zorgt ervoor dat ze allemaal behalve 1 worden verkocht, etc. itemNotEnough2=\u00a77Type /sell itemname Als je alles daarvan wilt verkopen
itemSellAir = Je wilde serieus lucht verkopen? Plaats een voorwerp in je hand. itemNotEnough3=\u00a77/sell itemname -1 zorgt ervoor dat ze allemaal behalve 1 worden verkocht, etc.
itemSold = \u00a77Verkocht voor \u00a7c {0} \u00a77 ({1} voorwerpen voor {2} per stuk) itemSellAir=Je wilde serieus lucht verkopen? Plaats een voorwerp in je hand.
itemSoldConsole = {0} verkocht {1} voor \u00a77 {2} \u00a77 ({3} voorwerpen voor {4} per stuk) itemSold=\u00a77Verkocht voor \u00a7c{0} \u00a77({1} {2} voorwerpen voor {3} per stuk)
itemSpawn = \u00a77Geeft {0} {1} itemSoldConsole={0} verkocht {1} voor \u00a77{2} \u00a77({3} voorwerpen voor {4} per stuk)
itemsCsvNotLoaded = De item kunnen niet geladen worden.csv. itemSpawn=\u00a77Geeft {0} {1}
jailAlreadyIncarcerated = \u00a7cPerson is already in jail: {0} itemsCsvNotLoaded=De item kunnen niet geladen worden.csv.
jailMessage = \u00a7cYou do the crime, you do the time. jailAlreadyIncarcerated=\u00a7cPerson is already in jail: {0}
jailNotExist = Die gevangenis bestaat niet. jailMessage=\u00a7cYou do the crime, you do the time.
jailReleased = \u00a77Player \u00a7e{0}\u00a77 unjailed. jailNotExist=Die gevangenis bestaat niet.
jailReleasedPlayerNotify = \u00a77You have been released! jailReleased=\u00a77Player \u00a7e{0}\u00a77 unjailed.
jailSentenceExtended = Jail time extend to: {0) jailReleasedPlayerNotify=\u00a77You have been released!
jailSet = \u00a77Gevangenis {0} is ingesteld jailSentenceExtended=Jail time extend to: {0)
jumpError = Dat zou je computers hersenen beschadigen. jailSet=\u00a77Gevangenis {0} is ingesteld
kickDefault = Gekicked van de server jumpError=Dat zou je computers hersenen beschadigen.
kickExempt = \u00a77Je kunt die speler niet schoppen. kickDefault=Gekicked van de server
kill = \u00a77Jij doodde {0}. kickExempt=\u00a77Je kunt die speler niet schoppen.
kitError = \u00a7cEr zijn geen geldige kits. kill=\u00a77Jij doodde {0}.
kitError2 = \u00a7cDie kit bestaat niet of is verkeerde beschreven. kitError=\u00a7cEr zijn geen geldige kits.
kitErrorHelp = \u00a7cMisschien mist er een hoeveelheid van het item in de configuratie? kitError2=\u00a7cDie kit bestaat niet of is verkeerde beschreven.
kitGive = \u00a77Kit {0} wordt gegeven. kitErrorHelp=\u00a7cMisschien mist er een hoeveelheid van het item in de configuratie?
kitInvFull = \u00a7cJe inventory was vol, de kit wordt op de grond geplaatst kitGive=\u00a77Kit {0} wordt gegeven.
kitTimed = \u00a7cJe kan die kit pas weer gebruiken over {0}. kitInvFull=\u00a7cJe inventory was vol, de kit wordt op de grond geplaatst
kits = \u00a77Kits: {0} kitTimed=\u00a7cJe kan die kit pas weer gebruiken over {0}.
lightningSmited = \u00a77Je bent zojuist verbrand kits=\u00a77Kits: {0}
lightningUse = \u00a77Brand {0} lightningSmited=\u00a77Je bent zojuist verbrand
loadWarpError = Fout bij het laden van warp {0} lightningUse=\u00a77Brand {0}
loadinfo = Build {1} geladen {0} van {2} loadWarpError=Fout bij het laden van warp {0}
localFormat = Local: <{0}> {1} loadinfo=Build {1} geladen {0} van {2}
mailClear = \u00a7cType /mail clear, om ej berichten als gelezen te markeren. localFormat=Local: <{0}> {1}
mailCleared = \u00a77Bericht geklaard! mailClear=\u00a7cType /mail clear, om ej berichten als gelezen te markeren.
mailSent = \u00a77Bericht verzonden! mailCleared=\u00a77Bericht geklaard!
markMailAsRead = \u00a7cType /mail clear, om je berichten als gelezen te markeren mailSent=\u00a77Bericht verzonden!
markedAsAway = \u00a77Je staat nu als afwezig gemeld. markMailAsRead=\u00a7cType /mail clear, om je berichten als gelezen te markeren
markedAsNotAway = \u00a77Je staat niet meer als afwezig gemeld. markedAsAway=\u00a77Je staat nu als afwezig gemeld.
markedAsNotAway=\u00a77Je staat niet meer als afwezig gemeld.
maxHomes=You cannot set more than {0} homes. maxHomes=You cannot set more than {0} homes.
mayNotJail = \u00a7cJe mag die speler niet in de gevangenis zetten. mayNotJail=\u00a7cJe mag die speler niet in de gevangenis zetten.
me = me me=me
minute = minuut minute=minuut
minutes = minuten minutes=minuten
missingItems = Je hebt geen {0}x {1}. missingItems=Je hebt geen {0}x {1}.
missingPrefixSuffix = Er mist een prefix of suffix voor {0} missingPrefixSuffix=Er mist een prefix of suffix voor {0}
mobSpawnError = Fout bij het veranderen van de mob spawner. mobSpawnError=Fout bij het veranderen van de mob spawner.
mobSpawnLimit = Grootte van de mob hang af van het server limiet mobSpawnLimit=Grootte van de mob hang af van het server limiet
mobSpawnTarget = Target blok moet een mob spawner zijn. mobSpawnTarget=Target blok moet een mob spawner zijn.
moneyRecievedFrom = \u00a7a{0} is ontvangen van {1} mobsAvailable=\u00a77Mobs: {0}
moneySentTo = \u00a7a{0} is verzonden naar {1} moneyRecievedFrom=\u00a7a{0} is ontvangen van {1}
moneyTaken = {0} van je bankrekening afgehaald. moneySentTo=\u00a7a{0} is verzonden naar {1}
month = maand moneyTaken={0} van je bankrekening afgehaald.
months = maanden month=maand
moreThanZero = Het aantal moet groter zijn dan 0. months=maanden
msgFormat = \u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2} moreThanZero=Het aantal moet groter zijn dan 0.
muteExempt = \u00a7cJe kan deze speler niet muten. msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
mutedPlayer = Speler {0} gemute. muteExempt=\u00a7cJe kan deze speler niet muten.
mutedPlayerFor = Speler {0} is gemute voor {1}. mutedPlayer=Speler {0} gemute.
mutedUserSpeaks = {0} probeerde te praten, maar is gemute. mutedPlayerFor=Speler {0} is gemute voor {1}.
needTpohere = Je moet toegang krijgen tot /tpohere om naar andere spelers te teleporteren. mutedUserSpeaks={0} probeerde te praten, maar is gemute.
negativeBalanceError = Speler is niet toegestaan om een negatief saldo te hebben. needTpohere=Je moet toegang krijgen tot /tpohere om naar andere spelers te teleporteren.
nickChanged = Nickname veranderd. negativeBalanceError=Speler is niet toegestaan om een negatief saldo te hebben.
nickChanged=Nickname veranderd.
nickDisplayName=\u00a77You have to enable change-displayname in Essentials config. nickDisplayName=\u00a77You have to enable change-displayname in Essentials config.
nickInUse = \u00a7cDie naam is al in gebruik. nickInUse=\u00a7cDie naam is al in gebruik.
nickNamesAlpha = \u00a7cNicknames moeten alfanumeriek zijn. nickNamesAlpha=\u00a7cNicknames moeten alfanumeriek zijn.
nickNoMore = \u00a7Je hebt geen nickname meer. nickNoMore=\u00a7Je hebt geen nickname meer.
nickOthersPermission = \u00a7cJe hebt geen toestemming om de nickname van anderen te veranderen nickOthersPermission=\u00a7cJe hebt geen toestemming om de nickname van anderen te veranderen
nickSet = \u00a77Je nickname is nu \u00a7c{0} nickSet=\u00a77Je nickname is nu \u00a7c{0}
noAccessCommand = \u00a7cJe hebt geen toegang tot die opdracht. noAccessCommand=\u00a7cJe hebt geen toegang tot die opdracht.
noAccessPermission = \u00a7cJe hebt hier geen toegang voor {0}. noAccessPermission=\u00a7cJe hebt hier geen toegang voor {0}.
noDestroyPermission = \u00a7cJe hebt geen toegang om dat te vernietigen {0}. noDestroyPermission=\u00a7cJe hebt geen toegang om dat te vernietigen {0}.
noHelpFound = \u00a7cNo matching commands. noHelpFound=\u00a7cNo matching commands.
noHomeSet = Je hebt geen home gemaakt. noHomeSet=Je hebt geen home gemaakt.
noHomeSetPlayer = Speler heeft geen home. noHomeSetPlayer=Speler heeft geen home.
noKitPermission = \u00a7cJe hebt de \u00a7c{0}\u00a7c toestemming nodig om die kit te gebruiken. noKitPermission=\u00a7cJe hebt de \u00a7c{0}\u00a7c toestemming nodig om die kit te gebruiken.
noKits = \u00a77Er zijn nog geen kits beschikbaar noKits=\u00a77Er zijn nog geen kits beschikbaar
noMail = Je hebt geen berichten noMail=Je hebt geen berichten
noMailSendPerm = \u00a7cJe hebt de \u00a7fessentials.mail.send\u00a7c toestemming niet. noMailSendPerm=\u00a7cJe hebt de \u00a7fessentials.mail.send\u00a7c toestemming niet.
noMotd = \u00a7cEr is geen bericht van de dag. noMotd=\u00a7cEr is geen bericht van de dag.
noNewMail = \u00a77Je hebt geen nieuwe berichten. noNewMail=\u00a77Je hebt geen nieuwe berichten.
noPendingRequest = Je hebt geen aanvragen. noPendingRequest=Je hebt geen aanvragen.
noPlacePermission = \u00a7cJe hebt geen toestemming om een blok naast die sign te plaatsen. noPlacePermission=\u00a7cJe hebt geen toestemming om een blok naast die sign te plaatsen.
noPowerTools=You have no power tools assigned. noPowerTools=You have no power tools assigned.
noRules = \u00a7cEr zijn nog geen regels gegeven. noRules=\u00a7cEr zijn nog geen regels gegeven.
noWarpsDefined = Geen warps gedefinieerd noWarpsDefined=Geen warps gedefinieerd
none = geen none=geen
notAllowedToQuestion = \u00a7cJe bent niet bevoegd om de vraag functie te gebruiken. notAllowedToQuestion=\u00a7cJe bent niet bevoegd om de vraag functie te gebruiken.
notAllowedToShout = \u00a7cJe bent niet bevoegd om de roep functie te gebruiken. notAllowedToShout=\u00a7cJe bent niet bevoegd om de roep functie te gebruiken.
notEnoughMoney = Je hebt niet voldoende middelen. notEnoughMoney=Je hebt niet voldoende middelen.
notRecommendedBukkit = De Bukkit versie is niet de aangeraden build voor Essentials. notRecommendedBukkit=De Bukkit versie is niet de aangeraden build voor Essentials.
notSupportedYet = Nog niet ondersteund. notSupportedYet=Nog niet ondersteund.
now = nu now=nu
numberRequired = Er moet daar een nummer, grapjas. numberRequired=Er moet daar een nummer, grapjas.
onlyDayNight = /time ondersteund alleen day/night. onlyDayNight=/time ondersteund alleen day/night.
onlyPlayers = Alleen in-game spelers kunnen {0} gebruiken. onlyPlayers=Alleen in-game spelers kunnen {0} gebruiken.
onlySunStorm = /weather only supports sun/storm. onlySunStorm=/weather only supports sun/storm.
pTimeCurrent = \u00a7e{0}''s\u00a7f time is {1}. pTimeCurrent=\u00a7e{0}''s\u00a7f time is {1}.
pTimeCurrentFixed = \u00a7e{0}''s\u00a7f time is fixed to {1}. pTimeCurrentFixed=\u00a7e{0}''s\u00a7f time is fixed to {1}.
pTimeNormal = \u00a7e{0}''s\u00a7f time is normal and matches the server. pTimeNormal=\u00a7e{0}''s\u00a7f time is normal and matches the server.
pTimeOthersPermission = \u00a7cYou are not authorized to set other players'' time. pTimeOthersPermission=\u00a7cYou are not authorized to set other players'' time.
pTimePlayers = These players have their own time: pTimePlayers=These players have their own time:
pTimeReset = Player time has been reset for: \u00a7e{0} pTimeReset=Player time has been reset for: \u00a7e{0}
pTimeSet = Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1} pTimeSet=Player time is set to \u00a73{0}\u00a7f for: \u00a7e{1}
pTimeSetFixed = Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1} pTimeSetFixed=Player time is fixed to \u00a73{0}\u00a7f for: \u00a7e{1}
parseError = Fout bij ontleding {0} op regel {1} parseError=Fout bij ontleding {0} op regel {1}
pendingTeleportCancelled = \u00a7cAangevraagde teleportatie afgelast. pendingTeleportCancelled=\u00a7cAangevraagde teleportatie afgelast.
permissionsError = Permissions/GroupManager ontbreekt; chat prefixes/suffixes worden uitgeschakeld. permissionsError=Permissions/GroupManager ontbreekt; chat prefixes/suffixes worden uitgeschakeld.
playerBanned = \u00a7cPlayer {0} banned {1} for {2} playerBanned=\u00a7cPlayer {0} banned {1} for {2}
playerInJail = \u00a7cSpeler zit al in de gevangenis {0}. playerInJail=\u00a7cSpeler zit al in de gevangenis {0}.
playerJailed = \u00a77Speler {0} is in de gevangenis gezet. playerJailed=\u00a77Speler {0} is in de gevangenis gezet.
playerJailedFor = \u00a77Speler {0} is in de gevangenis gezet voor {1}. playerJailedFor= \u00a77Speler {0} is in de gevangenis gezet voor {1}.
playerKicked = \u00a7cPlayer {0} kicked {1} for {2} playerKicked=\u00a7cPlayer {0} kicked {1} for {2}
playerMuted = \u00a77Je kreeg het zwijgen opgelegd. playerMuted=\u00a77Je kreeg het zwijgen opgelegd.
playerMutedFor = \u00a77Je kreeg het zwijgen opgelegd voor {0} playerMutedFor=\u00a77Je kreeg het zwijgen opgelegd voor {0}
playerNeverOnServer = \u00a7cSpeler {0} is nooit op deze server geweest. playerNeverOnServer=\u00a7cSpeler {0} is nooit op deze server geweest.
playerNotFound = \u00a7cSpeler niet gevonden. playerNotFound=\u00a7cSpeler niet gevonden.
playerUnmuted = \u00a77Speler mag weer praten playerUnmuted=\u00a77Speler mag weer praten
pong = Pong! pong=Pong!
possibleWorlds = \u00a77Mogelijk zijn de werelden de nummer 0 tot en met {0}. possibleWorlds=\u00a77Mogelijk zijn de werelden de nummer 0 tot en met {0}.
powerToolAir = Command kan niet worden bevestigd aan lucht. powerToolAir=Command kan niet worden bevestigd aan lucht.
powerToolAlreadySet = Command \u00a7c{0}\u00a7f is already assigned to {1}. powerToolAlreadySet=Command \u00a7c{0}\u00a7f is already assigned to {1}.
powerToolAttach = \u00a7c{0}\u00a7f command assigned to {1}. powerToolAttach=\u00a7c{0}\u00a7f command assigned to {1}.
powerToolClearAll = All powertool commands have been cleared. powerToolClearAll=All powertool commands have been cleared.
powerToolList = {1} has the following commands: \u00a7c{0}\u00a7f. powerToolList={1} has the following commands: \u00a7c{0}\u00a7f.
powerToolListEmpty = {0} has no commands assigned. powerToolListEmpty={0} has no commands assigned.
powerToolNoSuchCommandAssigned = Command \u00a7c{0}\u00a7f has not been assigned to {1}. powerToolNoSuchCommandAssigned=Command \u00a7c{0}\u00a7f has not been assigned to {1}.
powerToolRemove = Command \u00a7c{0}\u00a7f removed from {1}. powerToolRemove=Command \u00a7c{0}\u00a7f removed from {1}.
powerToolRemoveAll = All commands removed from {0}. powerToolRemoveAll=All commands removed from {0}.
powerToolsEnabled=All of your power tools have been enabled.
powerToolsDisabled=All of your power tools have been disabled. powerToolsDisabled=All of your power tools have been disabled.
protectionOwner = \u00a76[EssentialsProtect] Beschermingeigenaar: {0} powerToolsEnabled=All of your power tools have been enabled.
questionFormat = \u00a77[Vraag]\u00a7f {0} protectionOwner=\u00a76[EssentialsProtect] Beschermingeigenaar: {0}
reloadAllPlugins = \u00a77Alle plugins zijn herladen. questionFormat=\u00a77[Vraag]\u00a7f {0}
repair = You have successfully repaired your: \u00a7e{0}. reloadAllPlugins=\u00a77Alle plugins zijn herladen.
repairAlreadyFixed = \u00a77This item does not need repairing. repair=You have successfully repaired your: \u00a7e{0}.
repairInvalidType = \u00a7cThis item cannot be repaired. repairAlreadyFixed=\u00a77This item does not need repairing.
repairNone = There were no items that needing repairing. repairInvalidType=\u00a7cThis item cannot be repaired.
requestAccepted = \u00a77Teleporteer aanvraag geaccepteerd. repairNone=There were no items that needing repairing.
requestAcceptedFrom = \u00a77{0} accepted your teleport request. requestAccepted=\u00a77Teleporteer aanvraag geaccepteerd.
requestDenied = \u00a77Teleporteer aanvraag geweigerd. requestAcceptedFrom=\u00a77{0} accepted your teleport request.
requestDeniedFrom = \u00a77{0} denied your teleport request. requestDenied=\u00a77Teleporteer aanvraag geweigerd.
requestSent = \u00a77Aanvraag verstuurd naar {0}\u00a77. requestDeniedFrom=\u00a77{0} denied your teleport request.
returnPlayerToJailError = Fout opgetreden bij terugzetten van speler in gevangenis. requestSent=\u00a77Aanvraag verstuurd naar {0}\u00a77.
second = seconde returnPlayerToJailError=Fout opgetreden bij terugzetten van speler in gevangenis.
seconds = seconde second=seconde
seenOffline = Speler {0} is offline vanaf {1} seconds=seconde
seenOnline = Speler {0} is online vanaf {1} seenOffline=Speler {0} is offline vanaf {1}
serverFull = Server is vol seenOnline=Speler {0} is online vanaf {1}
setSpawner = Changed spawner type to {0} serverFull=Server is vol
sheepMalformedColor = Misvoormde kleur. setSpawner=Changed spawner type to {0}
shoutFormat = \u00a77[Shout]\u00a7f {0} sheepMalformedColor=Misvoormde kleur.
signFormatFail = \u00a74[{0}] shoutFormat=\u00a77[Shout]\u00a7f {0}
signFormatSuccess = \u00a71[{0}] signFormatFail=\u00a74[{0}]
signFormatTemplate = [{0}] signFormatSuccess=\u00a71[{0}]
signProtectInvalidLocation = \u00a74You are not allowed to create sign here. signFormatTemplate=[{0}]
similarWarpExist = Er bestaat al een warp met dezelfde naam. signProtectInvalidLocation=\u00a74You are not allowed to create sign here.
slimeMalformedSize = Misvoormde grootte. similarWarpExist=Er bestaat al een warp met dezelfde naam.
soloMob = Die mob is liever in zijn eentje slimeMalformedSize=Misvoormde grootte.
spawnSet = \u00a77Spawn locatie voor de groep {0} ingesteld. soloMob=Die mob is liever in zijn eentje
spawned = gespawned spawnSet=\u00a77Spawn locatie voor de groep {0} ingesteld.
suicideMessage = \u00a77Vaarwel vreedzame wereld... spawned=gespawned
suicideSuccess = \u00a77{0} pleegde zelfmoord suicideMessage=\u00a77Vaarwel vreedzame wereld...
takenFromAccount = \u00a7c{0} is van je bank rekening afgehaald. suicideSuccess= \u00a77{0} pleegde zelfmoord
takenFromOthersAccount = \u00a7c{0} is overgenomen uit {1} account. survival=survival
teleportAAll = \u00a77Teleporting request sent to all players... takenFromAccount=\u00a7c{0} is van je bank rekening afgehaald.
teleportAll = \u00a77Bezig met teleporteren van alle spelers... takenFromOthersAccount=\u00a7c{0} is overgenomen uit {1} account.
teleportAtoB = \u00a77{0}\u00a77 is naar {1}\u00a77 geteleporteerd. teleportAAll=\u00a77Teleporting request sent to all players...
teleportDisabled = {0} heeft teleporteren uit gezet. teleportAll=\u00a77Bezig met teleporteren van alle spelers...
teleportHereRequest = \u00a7c{0}\u00a7c Heeft gevraagd of hij/zij naar jou mag teleporteren. teleportAtoB=\u00a77{0}\u00a77 is naar {1}\u00a77 geteleporteerd.
teleportNewPlayerError = Fout bij het teleporteren van nieuwe speler. teleportDisabled={0} heeft teleporteren uit gezet.
teleportRequest = \u00a7c{0}\u00a7c vraagt of hij jou kan teleporteren. teleportHereRequest=\u00a7c{0}\u00a7c Heeft gevraagd of hij/zij naar jou mag teleporteren.
teleportTop = \u00a77Bezig met teleporteren naar de top. teleportNewPlayerError=Fout bij het teleporteren van nieuwe speler.
teleportationCommencing = \u00a77Aan het beginnen met teleporteren... teleportRequest=\u00a7c{0}\u00a7c vraagt of hij jou kan teleporteren.
teleportationDisabled = \u00a77Teleportatie uitgeschakeld. teleportTop=\u00a77Bezig met teleporteren naar de top.
teleportationEnabled = \u00a77Teleportatie ingeschakeld. teleportationCommencing=\u00a77Aan het beginnen met teleporteren...
teleporting = \u00a77Bezig met teleporteren... teleportationDisabled=\u00a77Teleportatie uitgeschakeld.
teleportingPortal = \u00a77Bezig met teleporteren via de portal. teleportationEnabled=\u00a77Teleportatie ingeschakeld.
tempBanned = Tijdelijk geband voor {0} teleporting=\u00a77Bezig met teleporteren...
tempbanExempt = \u00a77Je mag deze speler niet een tempban geven teleportingPortal=\u00a77Bezig met teleporteren via de portal.
thunder = Je {0} onweert de wereld tempBanned=Tijdelijk geband voor {0}
thunderDuration = Je {0} onweert de wereld voor {1} seconde. tempbanExempt=\u00a77Je mag deze speler niet een tempban geven
timeBeforeHeal = Afkoeltijd tot de volgende heal: {0} thunder= Je {0} onweert de wereld
timeBeforeTeleport = Afkoeltijd tot de volgende teleport: {0} thunderDuration=Je {0} onweert de wereld voor {1} seconde.
timeFormat = \u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f timeBeforeHeal=Afkoeltijd tot de volgende heal: {0}
timePattern = (?:([0-9]+)\\s*[yj][a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[oa][a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*[hu][a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)? timeBeforeTeleport=Afkoeltijd tot de volgende teleport: {0}
timeSet = Tijd ingesteld in alle werelden. timeFormat=\u00a73{0}\u00a7f or \u00a73{1}\u00a7f or \u00a73{2}\u00a7f
timeSetPermission = \u00a7cYou are not authorized to set the time. timePattern=(?:([0-9]+)\\s*[yj][a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[oa][a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*[hu][a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)?
timeWorldCurrent = The current time in {0} is \u00a73{1} timeSet=Tijd ingesteld in alle werelden.
timeWorldSet = The time was set to {0} in: \u00a7c{1} timeSetPermission=\u00a7cYou are not authorized to set the time.
tradeCompleted = \u00a77Ruil verricht. timeWorldCurrent=The current time in {0} is \u00a73{1}
tradeSignEmpty = Het handelsbordje heeft een te kleine voorraad. timeWorldSet=The time was set to {0} in: \u00a7c{1}
tradeSignEmptyOwner = There is nothing to collect from this trade sign. tradeCompleted=\u00a77Ruil verricht.
treeFailure = \u00a7cFout bij het genereren van boom. Pobeer het opnieuw op gras of dirt. tradeSignEmpty=Het handelsbordje heeft een te kleine voorraad.
treeSpawned = \u00a77Boom gespawned. tradeSignEmptyOwner=There is nothing to collect from this trade sign.
typeTpaccept = \u00a77Om te teleporten, type \u00a7c/tpaccept\u00a77. treeFailure=\u00a7cFout bij het genereren van boom. Pobeer het opnieuw op gras of dirt.
typeTpdeny = \u00a77Om te weigeren, type \u00a7c/tpdeny\u00a77. treeSpawned=\u00a77Boom gespawned.
typeWorldName = \u00a77Je kan ook de exacte naam van de wereld typen. true=true
unableToSpawnMob = De mob kan niet gespawned worden. typeTpaccept=\u00a77Om te teleporten, type \u00a7c/tpaccept\u00a77.
unbannedIP = IP adres ontbannen. typeTpdeny=\u00a77Om te weigeren, type \u00a7c/tpdeny\u00a77.
unbannedPlayer = Speler ontbannen. typeWorldName=\u00a77Je kan ook de exacte naam van de wereld typen.
unignorePlayer = Je negeert {0} niet meer. unableToSpawnMob=De mob kan niet gespawned worden.
unknownItemId = Onbekend voorwerp id: {0} unbannedIP=IP adres ontbannen.
unknownItemInList = Onbekend voorwerp {0} in {1} lijst. unbannedPlayer=Speler ontbannen.
unknownItemName = Onbekende voorwerp naam: {0} unignorePlayer=Je negeert {0} niet meer.
unlimitedItemPermission = \u00a7cOnbevoegd om oneindig {0} te hebben. unknownItemId=Onbekend voorwerp id: {0}
unlimitedItems = Oneindige voorwerpen: unknownItemInList=Onbekend voorwerp {0} in {1} lijst.
unmutedPlayer = Speler {0} mag weer spreken. unknownItemName=Onbekende voorwerp naam: {0}
upgradingFilesError = Fout tijdens het upgraden van de bestanden unlimitedItemPermission=\u00a7cOnbevoegd om oneindig {0} te hebben.
userCreatedPortal = {0} gebruikte een portal en maakte een uitgangs portal. unlimitedItems=Oneindige voorwerpen:
userDoesNotExist = Speler {0} bestaat niet. unmutedPlayer=Speler {0} mag weer spreken.
userIsAway = {0} is nu AFK upgradingFilesError=Fout tijdens het upgraden van de bestanden
userIsNotAway = {0} is niet meer AFK userDoesNotExist=Speler {0} bestaat niet.
userJailed = \u00a77Je bent in de gevangenis gezet. userIsAway={0} is nu AFK
userUsedPortal = {0} gebruikte een bestaande uitgangs portal. userIsNotAway={0} is niet meer AFK
userdataMoveBackError = Fout bij het verplaasten van userdata/{0}.tmp naar userdata/{1} userJailed=\u00a77Je bent in de gevangenis gezet.
userdataMoveError = Fout bij het verplaasten van userdata/{0} naar userdata/{1}.tmp userUsedPortal={0} gebruikte een bestaande uitgangs portal.
usingPortal = \u00a77Bezig met via de portal naar de uitgangs portal. userdataMoveBackError=Fout bij het verplaasten van userdata/{0}.tmp naar userdata/{1}
usingTempFolderForTesting = Tijdelijke map om te testen: userdataMoveError=Fout bij het verplaasten van userdata/{0} naar userdata/{1}.tmp
versionMismatch = Verkeerde versie! Update {0} naar dezelfde versie. usingTempFolderForTesting=Tijdelijke map om te testen:
versionMismatchAll = Verkeerde versie! Update alle Essentials jars naar dezelfde versie. versionMismatch=Verkeerde versie! Update {0} naar dezelfde versie.
voiceSilenced = \u00a77Je kan niet meer praten versionMismatchAll=Verkeerde versie! Update alle Essentials jars naar dezelfde versie.
warpDeleteError = Fout bij het verwijderen van het warp bestand. voiceSilenced=\u00a77Je kan niet meer praten
warpListPermission = \u00a7cJe hebt geen toegang om die warp te maken. warpDeleteError=Fout bij het verwijderen van het warp bestand.
warpNotExist = Die warp bestaat niet. warpListPermission=\u00a7cJe hebt geen toegang om die warp te maken.
warpSet = \u00a77Warp {0} ingesteld. warpNotExist=Die warp bestaat niet.
warpUsePermission = \u00a7cOnbevoegd om die warp te gebruiken. warpSet=\u00a77Warp {0} ingesteld.
warpingTo = \u00a77Aan het warpen naar {0}. warpUsePermission=\u00a7cOnbevoegd om die warp te gebruiken.
warpsCount = \u00a77There are {0} warps. Showing page {1} of {2}. warpingTo=\u00a77Aan het warpen naar {0}.
weatherStorm = \u00a77Je hebt het weer naar storm gezet in de {0} warps=Warps: {0}
weatherStormFor = \u00a77Je hebt het weer in de {0} naar storm gezet voor {1} seconde warpsCount=\u00a77There are {0} warps. Showing page {1} of {2}.
weatherSun = \u00a77Je hebt het weer naar zon gezet in de {0} weatherStorm=\u00a77Je hebt het weer naar storm gezet in de {0}
weatherSunFor = \u00a77Je hebt het weer in de {0} naar zon gezet voor {1} seconde weatherStormFor=\u00a77Je hebt het weer in de {0} naar storm gezet voor {1} seconde
whoisGeoLocation = \u00a79 - Locatie: {0} weatherSun=\u00a77Je hebt het weer naar zon gezet in de {0}
whoisHealth = \u00a79 - Levens: {0}/20 weatherSunFor=\u00a77Je hebt het weer in de {0} naar zon gezet voor {1} seconde
whoisIPAddress = \u00a79 - IP Adres: {0} whoisGamemode=\u00a79 - Gamemode: {0}
whoisIs = {0} is {1} whoisGeoLocation=\u00a79 - Locatie: {0}
whoisLocation = \u00a79 - Locatie: ({0}, {1}, {2}, {3}) whoisGod=\u00a79 - God mode: {0}
whoisMoney = \u00a79 - Geld: {0} whoisHealth=\u00a79 - Levens: {0}/20
whoisStatusAvailable = \u00a79 - Status: Beschikbaar whoisIPAddress=\u00a79 - IP Adres: {0}
whoisStatusAway = \u00a79 - Status: \u00a7cWeg\u00a7f whoisIs={0} is {1}
worth = \u00a77Stapel {0} met waarde \u00a7c{1}\u00a77 ({2} voorwerp(en) voor {3} per stuk) whoisLocation=\u00a79 - Locatie: ({0}, {1}, {2}, {3})
worthMeta = \u00a77Stapel {0} met een metadata van {1} met waarde \u00a7c{2}\u00a77 ({3} voorwerp(en) voor {4} per stuk) whoisMoney=\u00a79 - Geld: {0}
worthSet = Waarde ingesteld whoisOP=\u00a79 - OP: {0}
year = jaar whoisStatusAvailable=\u00a79 - Status: Beschikbaar
years = jaren whoisStatusAway=\u00a79 - Status: \u00a7cWeg\u00a7f
youAreHealed = \u00a77Je bent genezen. worth=\u00a77Stapel {0} met waarde \u00a7c{1}\u00a77 ({2} voorwerp(en) voor {3} per stuk)
youHaveNewMail = \u00a7cJe hebt {0} berichten!\u00a7f Type \u00a77/mail read\u00a7f om je berichten te bekijken. worthMeta=\u00a77Stapel {0} met een metadata van {1} met waarde \u00a7c{2}\u00a77 ({3} voorwerp(en) voor {4} per stuk)
worthSet=Waarde ingesteld
year=jaar
years=jaren
youAreHealed=\u00a77Je bent genezen.
youHaveNewMail=\u00a7cJe hebt {0} berichten!\u00a7f Type \u00a77/mail read\u00a7f om je berichten te bekijken.

View File

@@ -18,14 +18,14 @@ commands:
back: back:
description: Teleports you to your location prior to tp/spawn/warp. description: Teleports you to your location prior to tp/spawn/warp.
usage: /<command> usage: /<command>
aliases: [eback] aliases: [eback,return,ereturn]
backup: backup:
description: Runs the backup if configured. description: Runs the backup if configured.
usage: /<command> usage: /<command>
aliases: [ebackup] aliases: [ebackup]
balance: balance:
description: States the current balance of a player. description: States the current balance of a player.
usage: /<command> <player> usage: /<command> [player]
aliases: [bal,emoney,ebalance,ebal] aliases: [bal,emoney,ebalance,ebal]
balancetop: balancetop:
description: Gets the top x balance values. (max 10) description: Gets the top x balance values. (max 10)
@@ -33,23 +33,23 @@ commands:
aliases: [baltop,ebaltop,ebalancetop] aliases: [baltop,ebaltop,ebalancetop]
ban: ban:
description: Bans a player. description: Bans a player.
usage: /<command> [player] <reason> usage: /<command> <player> [reason]
aliases: [eban] aliases: [eban]
banip: banip:
description: Bans an IP address. description: Bans an IP address.
usage: /<command> [address] usage: /<command> <address>
aliases: [ebanip] aliases: [ebanip]
broadcast: broadcast:
description: Broadcasts a message to the entire server. description: Broadcasts a message to the entire server.
usage: /<command> [msg] usage: /<command> <msg>
aliases: [ebroadcast,bcast,ebcast] aliases: [ebroadcast,bcast,ebcast]
bigtree: bigtree:
description: Spawn a big tree where you are looking. description: Spawn a big tree where you are looking.
usage: /<command> [tree|redwood] usage: /<command> <tree|redwood>
aliases: [ebigtree] aliases: [ebigtree]
burn: burn:
description: Set a player on fire. description: Set a player on fire.
usage: /<command> [player] [seconds] usage: /<command> <player> <seconds>
aliases: [eburn] aliases: [eburn]
clearinventory: clearinventory:
description: Clear all items in your inventory. description: Clear all items in your inventory.
@@ -65,11 +65,11 @@ commands:
aliases: [edelhome,remhome,rmhome,eremhome,ermhome] aliases: [edelhome,remhome,rmhome,eremhome,ermhome]
deljail: deljail:
description: Removes a jail description: Removes a jail
usage: /<command> [jailname] usage: /<command> <jailname>
aliases: [edeljail] aliases: [edeljail]
delwarp: delwarp:
description: Deletes the specified warp. description: Deletes the specified warp.
usage: /<command> [warp] usage: /<command> <warp>
aliases: [edelwarp,remwarp,rmwarp,eremwarp,ermwarp] aliases: [edelwarp,remwarp,rmwarp,eremwarp,ermwarp]
depth: depth:
description: States current depth, relative to sea level. description: States current depth, relative to sea level.
@@ -77,38 +77,42 @@ commands:
aliases: [edepth] aliases: [edepth]
eco: eco:
description: Manages the server economy. description: Manages the server economy.
usage: /<command> [give|take|reset] [player] [amount] usage: /<command> <give|take|reset> <player> <amount>
aliases: [economy,emoney] aliases: [economy,eeco,eeconomy]
essentials: essentials:
description: Reloads essentials. description: Reloads essentials.
usage: /<command> usage: /<command>
ext: ext:
description: Extinguish players. description: Extinguish players.
usage: /<command> <player> usage: /<command> [player]
aliases: [extinguish,eext,eextinguish] aliases: [extinguish,eext,eextinguish]
fireball: fireball:
description: Throw a fireball. description: Throw a fireball.
usage: /<command> usage: /<command>
aliases: [efireball] aliases: [efireball]
gamemode:
description: Change player gamemode.
usage: /<command> [player]
aliases: [gm,creative,creativemode,egamemode,ecreative,ecreativemode,egm]
getpos: getpos:
description: Get your current coordinates. description: Get your current coordinates.
usage: /<command> usage: /<command>
aliases: [coords,egetpos] aliases: [coords,egetpos,whereami,ewhereami]
gc: gc:
description: Reports garbage collection info; useful to developers. description: Reports garbage collection info; useful to developers.
usage: /<command> usage: /<command>
aliases: [mem,memory,egc,emem,ememory] aliases: [mem,memory,egc,emem,ememory]
give: give:
description: Give a player an item. description: Give a player an item.
usage: /<command> [player] [item|numeric] <amount> usage: /<command> <player> <item|numeric> [amount]
aliases: [egive] aliases: [egive]
god: god:
description: Enables your godly powers. description: Enables your godly powers.
usage: /<command> usage: /<command> [player]
aliases: [tgm,godmode,egod,egodmode,etgm] aliases: [tgm,godmode,egod,etgm,egodmode]
heal: heal:
description: Heals you or the given player. description: Heals you or the given player.
usage: /<command> <player> usage: /<command> [player]
aliases: [eheal] aliases: [eheal]
help: help:
description: Views a list of available commands. description: Views a list of available commands.
@@ -116,7 +120,7 @@ commands:
aliases: [ehelp] aliases: [ehelp]
helpop: helpop:
description: Request help from online operators. description: Request help from online operators.
usage: /<command> [message] usage: /<command> <message>
aliases: [ehelpop] aliases: [ehelpop]
home: home:
description: Teleport to your home. description: Teleport to your home.
@@ -136,7 +140,7 @@ commands:
aliases: [einvsee] aliases: [einvsee]
item: item:
description: Spawn an item. description: Spawn an item.
usage: /<command> [item|numeric] <amount> usage: /<command> <item|numeric> [amount]
aliases: [i,eitem] aliases: [i,eitem]
jails: jails:
description: List all jails. description: List all jails.
@@ -148,15 +152,15 @@ commands:
aliases: [j,ejump] aliases: [j,ejump]
kick: kick:
description: Kicks a specified player with a reason. description: Kicks a specified player with a reason.
usage: /<command> <player> <reason> usage: /<command> <player> [reason]
aliases: [ekick] aliases: [ekick]
kickall: kickall:
description: Kicks all players off the server except the issuer. description: Kicks all players off the server except the issuer.
usage: /<command> <reason> usage: /<command> [reason]
aliases: [ekickall] aliases: [ekickall]
kit: kit:
description: Obtains the specified kit or views all available kits. description: Obtains the specified kit or views all available kits.
usage: /<command> <kit> usage: /<command> [kit]
aliases: [ekit,kits] aliases: [ekit,kits]
kill: kill:
description: Kills specified player. description: Kills specified player.
@@ -169,15 +173,15 @@ commands:
lightning: lightning:
description: The power of Thor. Strike at cursor or player. description: The power of Thor. Strike at cursor or player.
usage: /<command> [player] usage: /<command> [player]
aliases: [strike,smite,elightning,estrike,esmite] aliases: [strike,smite,thor,shock,elightning,estrike,esmite,ethor,eshock]
mail: mail:
description: Manages inter-player, intra-server mail. description: Manages inter-player, intra-server mail.
usage: /<command> [read|clear|send [to] [message]] usage: /<command> [read|clear|send [to] [message]]
aliases: [email] aliases: [email]
me: me:
description: Describes an action in the context of the player. description: Describes an action in the context of the player.
usage: /<command> [description] usage: /<command> <description>
aliases: [eme] aliases: [action,describe,eme,eaction,edescribe]
motd: motd:
description: Views the Message Of The Day. description: Views the Message Of The Day.
usage: /<command> usage: /<command>
@@ -188,19 +192,19 @@ commands:
aliases: [m,t,emsg,tell,etell,whisper,ewhisper] aliases: [m,t,emsg,tell,etell,whisper,ewhisper]
mute: mute:
description: Mutes or unmutes a player. description: Mutes or unmutes a player.
usage: /<command> [player] <datediff> usage: /<command> <player> [datediff]
aliases: [emute] aliases: [emute]
nick: nick:
description: Change your nickname or that of another player. description: Change your nickname or that of another player.
usage: /<command> <player> [nickname|off] usage: /<command> [player] <nickname|off>
aliases: [enick] aliases: [enick]
nuke: nuke:
description: May death rain upon them. description: May death rain upon them.
usage: /<command> <player> usage: /<command> [player]
aliases: [enuke] aliases: [enuke]
pay: pay:
description: Pays another player from your balance description: Pays another player from your balance
usage: /<command> [player] [amount] usage: /<command> <player> <amount>
aliases: [epay] aliases: [epay]
ping: ping:
description: Pong! description: Pong!
@@ -208,31 +212,27 @@ commands:
aliases: [pong,eping,epong] aliases: [pong,eping,epong]
powertool: powertool:
description: Assigns a command to the item in hand, {player} will be replaced by the name of the player that you click. description: Assigns a command to the item in hand, {player} will be replaced by the name of the player that you click.
usage: /<command> [l:|a:|r:][command] <arguments> usage: /<command> [l:|a:|r:|c:][command] [arguments]
aliases: [pt,epowertool,ept] aliases: [pt,epowertool,ept]
powertooltoggle: powertooltoggle:
description: Enables or disables all current powertools description: Enables or disables all current powertools
usage: /<command> usage: /<command>
aliases: [ptt,epowertooltoggle,eptt] aliases: [ptt,epowertooltoggle,eptt]
ptime: ptime:
description: Adjust player's client time. Add @ prefix to fix. description: Adjust player's client time. Add @ prefix to fix.
usage: /<command> [list|reset|day|night|dawn|17:30|4pm|4000ticks] <player|*> usage: /<command> [list|reset|day|night|dawn|17:30|4pm|4000ticks] [player|*]
aliases: [playertime, eptime, eplayertime] aliases: [playertime, eptime, eplayertime]
r: r:
description: Quickly reply to the last player to message you. description: Quickly reply to the last player to message you.
usage: /<command> [message] usage: /<command> <message>
aliases: [er,reply,ereply] aliases: [er,reply,ereply]
realname: realname:
description: Displays the username of a user based on nickname. description: Displays the username of a user based on nickname.
usage: /<command> [nickname] usage: /<command> <nickname>
aliases: [erealname] aliases: [erealname]
reloadall:
description: Reloads all plugins.
usage: /<command>
aliases: [rel,ereloadall,ereload,erel]
repair: repair:
description: Repairs the durability of all or one item. description: Repairs the durability of all or one item.
usage: /<command> [hand|all] usage: /<command> <hand|all>
aliases: [fix,erepair,efix] aliases: [fix,erepair,efix]
rules: rules:
description: Views the server rules. description: Views the server rules.
@@ -240,11 +240,11 @@ commands:
aliases: [erules] aliases: [erules]
seen: seen:
description: Shows the last logout time of a player description: Shows the last logout time of a player
usage: /<command> [playername] usage: /<command> <playername>
aliases: [eseen] aliases: [eseen]
sell: sell:
description: Sells the item currently in your hand. description: Sells the item currently in your hand.
usage: /<command> [itemname|id|hand|inventory|blocks] [-][amount] usage: /<command> <itemname|id|hand|inventory|blocks> [-][amount]
aliases: [esell] aliases: [esell]
sethome: sethome:
description: Set your home to your current location. description: Set your home to your current location.
@@ -252,15 +252,15 @@ commands:
aliases: [esethome] aliases: [esethome]
setjail: setjail:
description: Creates a jail where you specified named [jailname] description: Creates a jail where you specified named [jailname]
usage: /<command> [jailname] usage: /<command> <jailname>
aliases: [esetjail] aliases: [esetjail]
setwarp: setwarp:
description: Creates a new warp. description: Creates a new warp.
usage: /<command> [warp] usage: /<command> <warp>
aliases: [createwarp,esetwarp] aliases: [createwarp,esetwarp]
setworth: setworth:
description: Set the sell value of an item. description: Set the sell value of an item.
usage: /<command> [itemname|id] [price] usage: /<command> <itemname|id> <price>
aliases: [esetworth] aliases: [esetworth]
socialspy: socialspy:
description: Toggles if you can see msg/mail commands in chat. description: Toggles if you can see msg/mail commands in chat.
@@ -268,11 +268,11 @@ commands:
aliases: [esocialspy] aliases: [esocialspy]
spawner: spawner:
description: Change the mob type of a spawner description: Change the mob type of a spawner
usage: /<command> [mob] usage: /<command> <mob>
aliases: [espawner] aliases: [espawner]
spawnmob: spawnmob:
description: Spawns a mob. description: Spawns a mob.
usage: /<command> [mob]<:data><,mount<:data>> <amount> usage: /<command> <mob>[:data][,<mount>[:data]] [amount]
aliases: [espawnmob] aliases: [espawnmob]
suicide: suicide:
description: Causes you to perish. description: Causes you to perish.
@@ -280,19 +280,19 @@ commands:
aliases: [esuicide] aliases: [esuicide]
tempban: tempban:
description: Temporary ban a user. description: Temporary ban a user.
usage: /<command> [playername] [datediff] usage: /<command> <playername> <datediff>
aliases: [etempban] aliases: [etempban]
thunder: thunder:
description: Enable/disable thunder. description: Enable/disable thunder.
usage: /<command> <true/false> [duration] usage: /<command> <true/false> [duration]
aliases: [ethunder] aliases: [ethunder]
time: time:
description: Change the world time. Defaults to current world. description: Display/Change the world time. Defaults to current world.
usage: /<command> [day|night|dawn|17:30|4pm|4000ticks] [worldname|all] usage: /<command> [day|night|dawn|17:30|4pm|4000ticks] [worldname|all]
aliases: [etime, day, night] aliases: [etime, day, night]
togglejail: togglejail:
description: Prevents a player from interacting with the world and teleports him/her to the the jail specified description: Prevents a player from interacting with the world and teleports him/her to the the jail specified
usage: /<command> [player] [jailname] <datediff> usage: /<command> <player> <jailname> [datediff]
aliases: [tjail,unjail,eunjail,etogglejail] aliases: [tjail,unjail,eunjail,etogglejail]
top: top:
description: Teleport to the highest block at your current position. description: Teleport to the highest block at your current position.
@@ -300,63 +300,71 @@ commands:
aliases: [etop] aliases: [etop]
tp: tp:
description: Teleport to a player. description: Teleport to a player.
usage: /<command> [player] usage: /<command> <player> [otherplayer]
aliases: [etp] aliases: [etp]
tpa: tpa:
description: Request to teleport to the specified player. description: Request to teleport to the specified player.
usage: /<command> <player> usage: /<command> <player>
aliases: [call,etpa,ecal]
tpaall: tpaall:
description: Requests all players online to teleport to you. description: Requests all players online to teleport to you.
usage: /<command> <player> usage: /<command> <player>
aliases: [etpaall]
tpaccept: tpaccept:
description: Accepts a teleport request. description: Accepts a teleport request.
usage: /<command> usage: /<command>
aliases: [tpyes] aliases: [tpyes,etpaccept,etpyes]
tpahere: tpahere:
description: Request that the specified player teleport to you. description: Request that the specified player teleport to you.
usage: /<command> <player> usage: /<command> <player>
aliases: [etpahere]
tpall: tpall:
description: Teleport all online players to another player. description: Teleport all online players to another player.
usage: /<command> <player> usage: /<command> <player>
aliases: [etpall]
tpdeny: tpdeny:
description: Reject a teleport request. description: Reject a teleport request.
usage: /<command> usage: /<command>
aliases: [tpno] aliases: [tpno,etpdeny,etpno]
tphere: tphere:
description: Teleport a player to you. description: Teleport a player to you.
usage: /<command> [player] usage: /<command> <player>
aliases: [s] aliases: [s,etphere]
tpo: tpo:
description: Teleport override for tptoggle. description: Teleport override for tptoggle.
usage: /<command> <player> usage: /<command> <player>
aliases: [etpo]
tpohere: tpohere:
description: Teleport here override for tptoggle. description: Teleport here override for tptoggle.
usage: /<command> <player> usage: /<command> <player>
aliases: [etpohere]
tppos: tppos:
description: Teleport to coordinates. description: Teleport to coordinates.
usage: /<command> <x> <y> <z> [yaw] [pitch] usage: /<command> <x> <y> <z> [yaw] [pitch]
aliases: [etppos]
tptoggle: tptoggle:
description: Blocks all forms of teleportation. description: Blocks all forms of teleportation.
usage: /<command> usage: /<command>
aliases: [etptoggle]
tree: tree:
description: Spawn a tree where you are looking. description: Spawn a tree where you are looking.
usage: /<command> [tree|birch|redwood] usage: /<command> <tree|birch|redwood>
aliases: [etree] aliases: [etree]
unban: unban:
description: Unbans the specified player. description: Unbans the specified player.
usage: /<command> [player] usage: /<command> <player>
aliases: [pardon,eunban] aliases: [pardon,eunban]
unbanip: unbanip:
description: Unbans the specified IP address. description: Unbans the specified IP address.
usage: /<command> [address] usage: /<command> <address>
aliases: [eunbanip,pardonip] aliases: [eunbanip,pardonip]
unlimited: unlimited:
description: Allows the unlimited placing of items. description: Allows the unlimited placing of items.
usage: /<command> [list|item] <player> usage: /<command> <list|item|clear> [player]
aliases: [eunlimited,ul,unl,eul,eunl] aliases: [eunlimited,ul,unl,eul,eunl]
warp: warp:
description: List all warps or warp to the specified location. description: List all warps or warp to the specified location.
usage: /<command> [pagenumber|warp] <player> usage: /<command> <pagenumber|warp> [player]
aliases: [ewarp,warps] aliases: [ewarp,warps]
weather: weather:
description: Setting the weather. description: Setting the weather.
@@ -364,7 +372,7 @@ commands:
aliases: [sky,sun,storm,eweather,esky,esun,estorm] aliases: [sky,sun,storm,eweather,esky,esun,estorm]
whois: whois:
description: Determine the username behind a nickname. description: Determine the username behind a nickname.
usage: /<command> [nickname] usage: /<command> <nickname>
aliases: [ewhois] aliases: [ewhois]
world: world:
description: Switch between worlds. description: Switch between worlds.
@@ -372,5 +380,5 @@ commands:
aliases: [eworld] aliases: [eworld]
worth: worth:
description: Calculates the worth of items in hand or as specified. description: Calculates the worth of items in hand or as specified.
usage: /<command> <item> <amount> usage: /<command> [item] [amount]
aliases: [eworth] aliases: [eworth]

View File

@@ -24,8 +24,12 @@ public class EssentialsChat extends JavaPlugin
chatListener = new HashMap<String, IEssentialsChatListener>(); chatListener = new HashMap<String, IEssentialsChatListener>();
final EssentialsChatPlayerListener playerListener = new EssentialsChatPlayerListener(getServer(), ess, chatListener); final EssentialsChatPlayerListenerLowest playerListenerLowest = new EssentialsChatPlayerListenerLowest(getServer(), ess, chatListener);
pluginManager.registerEvent(Type.PLAYER_CHAT, playerListener, Priority.High, this); final EssentialsChatPlayerListenerNormal playerListenerNormal = new EssentialsChatPlayerListenerNormal(getServer(), ess, chatListener);
final EssentialsChatPlayerListenerHighest playerListenerHighest = new EssentialsChatPlayerListenerHighest(getServer(), ess, chatListener);
pluginManager.registerEvent(Type.PLAYER_CHAT, playerListenerLowest, Priority.Lowest, this);
pluginManager.registerEvent(Type.PLAYER_CHAT, playerListenerNormal, Priority.Normal, this);
pluginManager.registerEvent(Type.PLAYER_CHAT, playerListenerHighest, Priority.Highest, this);
if (!this.getDescription().getVersion().equals(ess.getDescription().getVersion())) if (!this.getDescription().getVersion().equals(ess.getDescription().getVersion()))
{ {
LOGGER.log(Level.WARNING, Util.i18n("versionMismatchAll")); LOGGER.log(Level.WARNING, Util.i18n("versionMismatchAll"));

View File

@@ -0,0 +1,163 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.earth2me.essentials.chat;
import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import java.util.Map;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerListener;
/**
*
* @author Seiji
*/
public abstract class EssentialsChatPlayer extends PlayerListener
{
protected transient IEssentials ess;
protected final static Logger logger = Logger.getLogger("Minecraft");
protected final transient Map<String, IEssentialsChatListener> listeners;
protected final transient Server server;
public EssentialsChatPlayer(Server server, IEssentials ess, Map<String, IEssentialsChatListener> listeners)
{
this.ess = ess;
this.listeners = listeners;
this.server = server;
}
public void onPlayerChat(final PlayerChatEvent event)
{
}
public boolean isAborted(final PlayerChatEvent event)
{
return isAborted(event, "chat");
}
public boolean isAborted(final PlayerChatEvent event, final String command)
{
if (event.isCancelled())
{
return true;
}
for (IEssentialsChatListener listener : listeners.values())
{
if (listener.shouldHandleThisChat(event))
{
return true;
}
}
final User user = ess.getUser(event.getPlayer());
if (!isAffordableFor(user, command))
{
event.setCancelled(true);
return true;
}
return false;
}
public String getChatType(final String message)
{
switch (message.charAt(0))
{
case '!':
return "shout";
case '?':
return "question";
default:
return "";
}
}
protected void charge(final CommandSender sender, final String command) throws ChargeException
{
if (sender instanceof Player)
{
final Trade charge = new Trade(command, ess);
charge.charge(ess.getUser((Player)sender));
}
}
protected boolean isAffordableFor(final CommandSender sender, final String command)
{
if (sender instanceof Player)
{
try
{
final Trade charge = new Trade(command, ess);
charge.isAffordableFor(ess.getUser((Player)sender));
}
catch (ChargeException e)
{
return false;
}
}
else
{
return false;
}
return true;
}
protected void sendLocalChat(final User sender, final long radius, final PlayerChatEvent event)
{
event.setCancelled(true);
logger.info(Util.format("localFormat", sender.getName(), event.getMessage()));
final Location loc = sender.getLocation();
final World world = loc.getWorld();
final int x = loc.getBlockX();
final int y = loc.getBlockY();
final int z = loc.getBlockZ();
for (Player p : server.getOnlinePlayers())
{
String type = "[L]";
final User u = ess.getUser(p);
//TODO: remove reference to op
if (u.isIgnoredPlayer(sender.getName()) && !sender.isOp())
{
continue;
}
if (!u.equals(sender))
{
final Location l = u.getLocation();
final int dx = x - l.getBlockX();
final int dy = y - l.getBlockY();
final int dz = z - l.getBlockZ();
final long delta = dx * dx + dy * dy + dz * dz;
if (delta > radius || world != l.getWorld())
{
if (!u.isAuthorized("essentials.chat.spy"))
{
continue;
}
else
{
type = type.concat("[Spy]");
}
}
}
String message = String.format(event.getFormat(), type.concat(sender.getDisplayName()), event.getMessage());
for (IEssentialsChatListener listener : listeners.values())
{
message = listener.modifyMessage(event, p, message);
}
u.sendMessage(message);
}
}
}

View File

@@ -1,146 +0,0 @@
package com.earth2me.essentials.chat;
import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import java.util.Map;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerListener;
public class EssentialsChatPlayerListener extends PlayerListener
{
private static final Logger LOGGER = Logger.getLogger("Minecraft");
private final transient IEssentials ess;
private final transient Server server;
private final transient Map<String, IEssentialsChatListener> listeners;
public EssentialsChatPlayerListener(final Server server, final IEssentials ess, final Map<String, IEssentialsChatListener> listeners)
{
this.server = server;
this.ess = ess;
this.listeners = listeners;
}
@Override
public void onPlayerChat(final PlayerChatEvent event)
{
if (event.isCancelled())
{
return;
}
for (IEssentialsChatListener listener : listeners.values())
{
if (listener.shouldHandleThisChat(event))
{
return;
}
}
final User user = ess.getUser(event.getPlayer());
if (user.isAuthorized("essentials.chat.color"))
{
event.setMessage(event.getMessage().replaceAll("&([0-9a-f])", "§$1"));
}
event.setFormat(ess.getSettings().getChatFormat(user.getGroup()).replace('&', '§').replace("§§", "&").replace("{DISPLAYNAME}", "%1$s").replace("{GROUP}", user.getGroup()).replace("{MESSAGE}", "%2$s").replace("{WORLDNAME}", user.getWorld().getName()).replace("{SHORTWORLDNAME}", user.getWorld().getName().substring(0, 1).toUpperCase()));
long radius = ess.getSettings().getChatRadius();
if (radius < 1)
{
return;
}
radius *= radius;
try {
if (event.getMessage().startsWith("!") && event.getMessage().length() > 1)
{
if (user.isAuthorized("essentials.chat.shout"))
{
charge(user,"chat-shout");
event.setMessage(event.getMessage().substring(1));
event.setFormat(Util.format("shoutFormat", event.getFormat()));
return;
}
user.sendMessage(Util.i18n("notAllowedToShout"));
event.setCancelled(true);
return;
}
if (event.getMessage().startsWith("?") && event.getMessage().length() > 1)
{
if (user.isAuthorized("essentials.chat.question"))
{
charge(user,"chat-question");
event.setMessage(event.getMessage().substring(1));
event.setFormat(Util.format("questionFormat", event.getFormat()));
return;
}
user.sendMessage(Util.i18n("notAllowedToQuestion"));
event.setCancelled(true);
return;
}
}
catch (ChargeException ex)
{
ess.showError(user, ex, "Shout");
return;
}
event.setCancelled(true);
LOGGER.info(Util.format("localFormat", user.getName(), event.getMessage()));
final Location loc = user.getLocation();
final World world = loc.getWorld();
final int x = loc.getBlockX();
final int y = loc.getBlockY();
final int z = loc.getBlockZ();
for (Player p : server.getOnlinePlayers())
{
final User u = ess.getUser(p);
if (u.isIgnoredPlayer(user.getName()) && !user.isOp())
{
continue;
}
if (!u.equals(user) && !u.isAuthorized("essentials.chat.spy"))
{
final Location l = u.getLocation();
final int dx = x - l.getBlockX();
final int dy = y - l.getBlockY();
final int dz = z - l.getBlockZ();
final long delta = dx*dx + dy*dy + dz*dz;
if (delta > radius || world != l.getWorld())
{
continue;
}
}
String message = String.format(event.getFormat(), user.getDisplayName(), event.getMessage());
for (IEssentialsChatListener listener : listeners.values())
{
message = listener.modifyMessage(event, p, message);
}
u.sendMessage(message);
}
}
protected void charge(final CommandSender sender, final String command) throws ChargeException
{
if (sender instanceof Player)
{
final Trade charge = new Trade(command, ess);
charge.charge(ess.getUser((Player)sender));
}
}
}

View File

@@ -0,0 +1,50 @@
package com.earth2me.essentials.chat;
import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
import java.util.Map;
import org.bukkit.Server;
import org.bukkit.event.player.PlayerChatEvent;
public class EssentialsChatPlayerListenerHighest extends EssentialsChatPlayer
{
public EssentialsChatPlayerListenerHighest(Server server, IEssentials ess, Map<String, IEssentialsChatListener> listeners)
{
super(server, ess, listeners);
}
@Override
public void onPlayerChat(final PlayerChatEvent event)
{
if (isAborted(event))
{
return;
}
/**
* This file should handle charging the user for the action before returning control back
*/
final User user = ess.getUser(event.getPlayer());
final String chatType = getChatType(event.getMessage());
final StringBuilder command = new StringBuilder();
command.append("chat");
if (chatType.length() > 0)
{
command.append("-").append(chatType);
}
try
{
charge(user, command.toString());
}
catch (ChargeException e)
{
ess.showError(user, e, command.toString());
event.setCancelled(true);
return;
}
}
}

View File

@@ -0,0 +1,38 @@
package com.earth2me.essentials.chat;
import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import java.util.Map;
import org.bukkit.Server;
import org.bukkit.event.player.PlayerChatEvent;
public class EssentialsChatPlayerListenerLowest extends EssentialsChatPlayer
{
public EssentialsChatPlayerListenerLowest(Server server, IEssentials ess, Map<String, IEssentialsChatListener> listeners)
{
super(server, ess, listeners);
}
@Override
public void onPlayerChat(final PlayerChatEvent event)
{
if (isAborted(event))
{
return;
}
/**
* This listener should apply the general chat formatting only...then return control back
* the event handler
*/
final User user = ess.getUser(event.getPlayer());
if (user.isAuthorized("essentials.chat.color"))
{
event.setMessage(event.getMessage().replaceAll("&([0-9a-f])", "\u00a7$1"));
}
event.setFormat(ess.getSettings().getChatFormat(user.getGroup()).replace('&', '\u00a7').replace("\u00a7\u00a7", "&").replace("{DISPLAYNAME}", "%1$s").replace("{GROUP}", user.getGroup()).replace("{MESSAGE}", "%2$s").replace("{WORLDNAME}", user.getWorld().getName()).replace("{SHORTWORLDNAME}", user.getWorld().getName().substring(0, 1).toUpperCase()));
}
}

View File

@@ -0,0 +1,76 @@
package com.earth2me.essentials.chat;
import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import java.util.Map;
import org.bukkit.Server;
import org.bukkit.event.player.PlayerChatEvent;
public class EssentialsChatPlayerListenerNormal extends EssentialsChatPlayer
{
public EssentialsChatPlayerListenerNormal(Server server, IEssentials ess, Map<String, IEssentialsChatListener> listeners)
{
super(server, ess, listeners);
}
@Override
public void onPlayerChat(final PlayerChatEvent event)
{
if (isAborted(event))
{
return;
}
/**
* This file should handle detection of the local chat features...
* if local chat is enabled, we need to handle it here
*/
final User user = ess.getUser(event.getPlayer());
final String chatType = getChatType(event.getMessage());
long radius = ess.getSettings().getChatRadius();
if (radius < 1)
{
return;
}
radius *= radius;
try
{
if (event.getMessage().length() > 0 && chatType.length() > 0)
{
StringBuilder permission = new StringBuilder();
permission.append("essentials.chat.").append(chatType);
StringBuilder command = new StringBuilder();
command.append("chat-").append(chatType);
StringBuilder format = new StringBuilder();
format.append(chatType).append("Format");
StringBuilder errorMsg = new StringBuilder();
errorMsg.append("notAllowedTo").append(chatType.substring(0, 1).toUpperCase()).append(chatType.substring(1));
if (user.isAuthorized(permission.toString()))
{
charge(user, command.toString());
event.setMessage(event.getMessage().substring(1));
event.setFormat(Util.format(format.toString(), event.getFormat()));
return;
}
user.sendMessage(Util.i18n(errorMsg.toString()));
event.setCancelled(true);
return;
}
}
catch (ChargeException ex)
{
ess.showError(user, ex, "Shout");
event.setCancelled(true);
return;
}
sendLocalChat(user, radius, event);
}
}

View File

@@ -1,6 +1,6 @@
build.xml.data.CRC32=cbf94f59 build.xml.data.CRC32=cbf94f59
build.xml.script.CRC32=c4b1bb0e build.xml.script.CRC32=c4b1bb0e
build.xml.stylesheet.CRC32=28e38971@1.43.1.45 build.xml.stylesheet.CRC32=28e38971@1.44.1.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=cbf94f59 nbproject/build-impl.xml.data.CRC32=cbf94f59

View File

@@ -48,4 +48,26 @@ v 1.4:
Enable to allow default Bukkit based permissions to remain enabled, unless directly negated within GroupManager. Enable to allow default Bukkit based permissions to remain enabled, unless directly negated within GroupManager.
- Fixed reading world mirrors from the config. - Fixed reading world mirrors from the config.
- Simplified config.yml while retaining backwards compatibility. - Simplified config.yml while retaining backwards compatibility.
- Added data.save.hours setting to config. This allow control over how long backups are retained. - Added data.save.hours setting to config. This allow control over how long backups are retained.
v 1.5:
- Fixed opOverrides and bukkit_perms_override to read the correct entries.
- Better commenting in config.yml
- Fixed GM to recognize Superperm child nodes.
If you add a node like Towny.admin GM will now correctly report on all child nodes.
- Fixed GM loading world data files twice at startup.
- Improved error reporting for invalid groups.yml
- Added Global Groups
Defined in groupmanager/globalgroups.yml.
Create groups in the yml with a g: prefix, then inherit in the worlds groups files.
- Added Info node support to Global Groups.
- Fixed an error on 'manucheckv'. If the users doesn't have the variable it fell through causing an exception.
- Added checking of subgroups for Info nodes.
- Expanded 'canUserBuild()' to include inheritance and subgroups.
- Added a config.yml setting of 'validate_toggle' for those who prefer 'mantogglevalidate' to always be off.
- Prevent setting 'minutes' in the config to zero causing an error.
- GM will now check to see if it's data files have been changed at each scheduled save.
If the files have been altered (on disc) it will reload, so long as the in-memory data hasn't changed.
If the files on Disc have changed AND there have been changes to it's in-memory data it will show a warning.
You then MUST issue a '/mansave force' to overwrite the disc files, or a '/manload' to overwrite the memory data.
- Fix for an error in checkFullUserPermission caused by players disconnecting mid perms update.
- Notification of being moved to the default group only happens if it's a demotion/promotion (not on join).

View File

@@ -1,12 +1,17 @@
settings: settings:
config: config:
# With this enabled anyone set as op has full permissions when managing GroupManager # With this enabled anyone set as op has full permissions when managing GroupManager
# The user will be able to promote players to the same group or even above.
opOverrides: true opOverrides: true
# If enabled any bukkit permissiosn which default to true will be left enabled. # If enabled any plugins bukkit permissions which default to true will be left enabled.
# If the player is op any permissions set to Op will follow suit. # If the player is op any permissions set to Op will follow suit.
bukkit_perms_override: false bukkit_perms_override: false
# Default setting for 'mantoglevalidate'
# true will cause GroupManager to attempt name matching by default.
validate_toggle: true
data: data:
save: save:
# How often GroupManager will save it's data back to groups and users.yml # How often GroupManager will save it's data back to groups and users.yml
@@ -21,6 +26,9 @@ settings:
mirrors: mirrors:
# Worlds listed here have their permissions mirrored in their children. # Worlds listed here have their permissions mirrored in their children.
# the first element 'world' is the main worlds name
# subsequent elements '- world_nether' are worlds which will use the same
# user/groups permissions as the parent.
world: world:
- world_nether - world_nether
- world2 - world2

View File

@@ -0,0 +1,181 @@
groups:
g:bukkit_default:
permissions:
- bukkit.broadcast.user
g:essentials_default:
permissions:
- essentials.help
- essentials.helpop
- essentials.list
- essentials.motd
- essentials.rules
- essentials.spawn
- groupmanager.notify.self
g:essentials_builder:
permissions:
- essentials.afk
- essentials.back
- essentials.back.ondeath
- essentials.balance
- essentials.balance.others
- essentials.balancetop
- essentials.chat.color
- essentials.chat.shout
- essentials.chat.question
- essentials.compass
- essentials.depth
- essentials.home
- essentials.ignore
- essentials.kit
- essentials.kit.tools
- essentials.mail
- essentials.mail.send
- essentials.me
- essentials.msg
- essentials.nick
- essentials.pay
- essentials.ping
- essentials.powertool
- essentials.protect
- essentials.sethome
- essentials.signs.use.*
- essentials.signs.create.disposal
- essentials.signs.create.mail
- essentials.signs.create.protection
- essentials.signs.create.trade
- essentials.signs.break.disposal
- essentials.signs.break.mail
- essentials.signs.break.protection
- essentials.signs.break.trade
- essentials.suicide
- essentials.time
- essentials.tpa
- essentials.tpaccept
- essentials.tpahere
- essentials.tpdeny
- essentials.warp
- essentials.warp.list
- essentials.worth
g:essentials_moderator:
permissions:
- essentials.ban
- essentials.ban.notify
- essentials.banip
- essentials.broadcast
- essentials.clearinventory
- essentials.delwarp
- essentials.eco.loan
- essentials.ext
- essentials.getpos
- essentials.helpop.recieve
- essentials.home.others
- essentials.invsee
- essentials.jails
- essentials.jump
- essentials.kick
- essentials.kick.notify
- essentials.kill
- essentials.mute
- essentials.nick.others
- essentials.realname
- essentials.setwarp
- essentials.signs.create.*
- essentials.signs.break.*
- essentials.spawner
- essentials.thunder
- essentials.time
- essentials.time.set
- essentials.protect.alerts
- essentials.protect.admin
- essentials.protect.ownerinfo
- essentials.ptime
- essentials.ptime.others
- essentials.togglejail
- essentials.top
- essentials.tp
- essentials.tphere
- essentials.tppos
- essentials.tptoggle
- essentials.unban
- essentials.unbanip
- essentials.weather
- essentials.whois
- essentials.world
- groupmanager.listgroups
- groupmanager.mandemote
- groupmanager.manpromote
- groupmanager.manselect
- groupmanager.manuadd
- groupmanager.manudel
- groupmanager.manwhois
- groupmanager.notify.other
g:essentials_admin:
permissions:
- -essentials.backup
- -essentials.essentials
- -essentials.setspawn
- -essentials.reloadall
- -essentials.plugin
- essentials.*
- groupmanager.mantogglevalidate
- groupmanager.mansave
- groupmanager.mangcheckp
- groupmanager.manglistp
- groupmanager.manucheckp
- groupmanager.manulistp
g:bukkit_moderator:
permissions:
- bukkit.command.ban
- bukkit.command.ban.ip
- bukkit.command.ban.player
- bukkit.command.gamemode
- bukkit.command.kick
- bukkit.command.unban
- bukkit.command.unban.ip
- bukkit.command.unban.player
g:bukkit_admin:
permissions:
- bPermissions.admin
- bPermissions.demote.admin
- bPermissions.gui
- bPermissions.iplock.lock
- bPermissions.promote.admin
- bukkit.broadcast
- bukkit.broadcast.admin
- bukkit.command
- bukkit.command.give
- bukkit.command.help
- bukkit.command.kill
- bukkit.command.list
- bukkit.command.me
- bukkit.command.op
- bukkit.command.op.give
- bukkit.command.op.take
- bukkit.command.plugins
- bukkit.command.reload
- bukkit.command.save
- bukkit.command.save.disable
- bukkit.command.save.enable
- bukkit.command.save.perform
- bukkit.command.say
- bukkit.command.stop
- bukkit.command.teleport
- bukkit.command.tell
- bukkit.command.time
- bukkit.command.time.add
- bukkit.command.time.set
- bukkit.command.version
- bukkit.command.whitelist
- bukkit.command.whitelist.add
- bukkit.command.whitelist.disable
- bukkit.command.whitelist.enable
- bukkit.command.whitelist.list
- bukkit.command.whitelist.reload
- bukkit.command.whitelist.remove

View File

@@ -2,148 +2,42 @@ groups:
Default: Default:
default: true default: true
permissions: permissions:
- essentials.help - -bukkit.command.kill
- essentials.helpop inheritance:
- essentials.list - g:essentials_default
- essentials.motd - g:bukkit_default
- essentials.rules
- essentials.spawn
- groupmanager.notify.self
inheritance: []
info: info:
prefix: '&e' prefix: '&e'
build: false build: false
suffix: '' suffix: ''
Builder: Builder:
default: false default: false
permissions: permissions: []
- essentials.afk
- essentials.back
- essentials.back.ondeath
- essentials.balance
- essentials.balance.others
- essentials.balancetop
- essentials.chat.color
- essentials.chat.shout
- essentials.chat.question
- essentials.compass
- essentials.depth
- essentials.home
- essentials.ignore
- essentials.kit
- essentials.kit.tools
- essentials.mail
- essentials.mail.send
- essentials.me
- essentials.msg
- essentials.nick
- essentials.pay
- essentials.ping
- essentials.portal
- essentials.powertool
- essentials.protect
- essentials.sethome
- essentials.signs.use.*
- essentials.signs.create.disposal
- essentials.signs.create.mail
- essentials.signs.create.protection
- essentials.signs.create.trade
- essentials.signs.break.disposal
- essentials.signs.break.mail
- essentials.signs.break.protection
- essentials.signs.break.trade
- essentials.suicide
- essentials.time
- essentials.tpa
- essentials.tpaccept
- essentials.tpahere
- essentials.tpdeny
- essentials.warp
- essentials.warp.list
- essentials.worth
inheritance: inheritance:
- default - default
- g:essentials_builder
info: info:
prefix: '&2' prefix: '&2'
build: true build: true
suffix: '' suffix: ''
Moderator: Moderator:
default: false default: false
permissions: permissions: []
- essentials.ban
- essentials.ban.notify
- essentials.banip
- essentials.broadcast
- essentials.clearinventory
- essentials.delwarp
- essentials.eco.loan
- essentials.ext
- essentials.getpos
- essentials.helpop.recieve
- essentials.home.others
- essentials.invsee
- essentials.jails
- essentials.jump
- essentials.kick
- essentials.kick.notify
- essentials.kill
- essentials.mute
- essentials.nick.others
- essentials.realname
- essentials.setwarp
- essentials.signs.create.*
- essentials.signs.break.*
- essentials.spawner
- essentials.thunder
- essentials.time
- essentials.time.set
- essentials.protect.alerts
- essentials.protect.admin
- essentials.protect.ownerinfo
- essentials.ptime
- essentials.ptime.others
- essentials.togglejail
- essentials.top
- essentials.tp
- essentials.tphere
- essentials.tppos
- essentials.tptoggle
- essentials.unban
- essentials.unbanip
- essentials.weather
- essentials.whois
- essentials.world
- groupmanager.listgroups
- groupmanager.mandemote
- groupmanager.manpromote
- groupmanager.manselect
- groupmanager.manuadd
- groupmanager.manudel
- groupmanager.manwhois
- groupmanager.notify.other
inheritance: inheritance:
- builder - builder
- g:essentials_moderator
- g:bukkit_moderator
info: info:
prefix: '&5' prefix: '&5'
build: true build: true
suffix: '' suffix: ''
Admin: Admin:
default: false default: false
permissions: permissions: []
- -essentials.backup
- -essentials.essentials
- -essentials.setspawn
- -essentials.reloadall
- -essentials.plugin
- essentials.*
- groupmanager.mantogglevalidate
- groupmanager.mansave
- groupmanager.mangcheckp
- groupmanager.manglistp
- groupmanager.manucheckp
- groupmanager.manulistp
inheritance: inheritance:
- moderator - moderator
- g:essentials_admin
- g:bukkit_admin
info: info:
prefix: '&c' prefix: '&c'
build: true build: true

View File

@@ -48,14 +48,20 @@ public class GMConfiguration {
} catch (Exception ex) { } catch (Exception ex) {
throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + configFile.getPath(), ex); throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + configFile.getPath(), ex);
} }
// Setup defaults
adjustLoggerLevel(); adjustLoggerLevel();
plugin.setValidateOnlinePlayer(isToggleValidate());
} }
public boolean isOpOverride() { public boolean isOpOverride() {
return GMconfig.getBoolean("settings.config.bukkit_perms_override", true); return GMconfig.getBoolean("settings.config.opOverrides", true);
} }
public boolean isBukkitPermsOverride() { public boolean isBukkitPermsOverride() {
return GMconfig.getBoolean("settings.config.opOverrides", true); return GMconfig.getBoolean("settings.config.bukkit_perms_override", false);
}
public boolean isToggleValidate() {
return GMconfig.getBoolean("settings.config.validate_toggle", true);
} }
public Map<String, Object> getMirrorsMap() { public Map<String, Object> getMirrorsMap() {

View File

@@ -0,0 +1,401 @@
package org.anjocaido.groupmanager;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import org.anjocaido.groupmanager.data.Group;
import org.anjocaido.groupmanager.utils.PermissionCheckResult;
import org.anjocaido.groupmanager.utils.Tasks;
import org.bukkit.configuration.MemorySection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
/**
* @author ElgarL
*
*/
public class GlobalGroups {
private GroupManager plugin;
private YamlConfiguration GGroups;
private Map<String, Group> groups;
protected long timeStampGroups = 0;
protected boolean haveGroupsChanged = false;
protected File GlobalGroupsFile = null;
public GlobalGroups(GroupManager plugin) {
this.plugin = plugin;
load();
}
/**
* @return the haveGroupsChanged
*/
public boolean haveGroupsChanged() {
if (this.haveGroupsChanged) {
return true;
}
for (Group g : groups.values()) {
if (g.isChanged()) {
return true;
}
}
return false;
}
/**
* @return the timeStampGroups
*/
public long getTimeStampGroups() {
return timeStampGroups;
}
/**
* @param timeStampGroups the timeStampGroups to set
*/
protected void setTimeStampGroups(long timeStampGroups) {
this.timeStampGroups = timeStampGroups;
}
/**
* @param haveGroupsChanged
* the haveGroupsChanged to set
*/
public void setGroupsChanged(boolean haveGroupsChanged) {
this.haveGroupsChanged = haveGroupsChanged;
}
@SuppressWarnings("unchecked")
public void load() {
GGroups = new YamlConfiguration();
GroupManager.setLoaded(false);
// READ globalGroups FILE
if (GlobalGroupsFile == null)
GlobalGroupsFile = new File(plugin.getDataFolder(), "globalgroups.yml");
if (!GlobalGroupsFile.exists()) {
try {
// Create a new file if it doesn't exist.
Tasks.copy(plugin.getResourceAsStream("globalgroups.yml"), GlobalGroupsFile);
} catch (IOException ex) {
GroupManager.logger.log(Level.SEVERE, null, ex);
}
}
try {
GGroups.load(GlobalGroupsFile);
} catch (Exception ex) {
throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + GlobalGroupsFile.getPath(), ex);
}
// Read all global groups
Map<String, Object> allGroups = (Map<String, Object>) GGroups.getConfigurationSection("groups").getValues(false);
// Load each groups permissions list.
if (allGroups != null) {
// Clear out old groups
resetGlobalGroups();
for (String groupName : allGroups.keySet()) {
Group newGroup = new Group(groupName.toLowerCase());
Object element;
// Permission nodes
element = GGroups.get("groups." + groupName + ".permissions");
if (element != null)
if (element instanceof List) {
for (String node : (List<String>) element) {
newGroup.addPermission(node);
}
} else if (element instanceof String) {
newGroup.addPermission((String) element);
} else
throw new IllegalArgumentException("Unknown type of permission node for global group: " + groupName);
// Info nodes
element = GGroups.get("groups." + groupName + ".info");
if (element != null)
if (element instanceof MemorySection) {
Map<String, Object> vars = new HashMap<String, Object>();
for (String key : ((MemorySection) element).getKeys(false)) {
vars.put(key, ((MemorySection) element).get(key));
}
newGroup.setVariables(vars);
} else
throw new IllegalArgumentException("Unknown type of info node for global group: " + groupName);
// Push a new group
addGroup(newGroup);
}
}
removeGroupsChangedFlag();
setTimeStampGroups(GlobalGroupsFile.lastModified());
GroupManager.setLoaded(true);
//GlobalGroupsFile = null;
}
/**
* Write the globalgroups.yml file
*/
public void writeGroups(boolean overwrite) {
//File GlobalGroupsFile = new File(plugin.getDataFolder(), "globalgroups.yml");
if (haveGroupsChanged()) {
if (overwrite || (!overwrite && (getTimeStampGroups() >= GlobalGroupsFile.lastModified()))) {
Map<String, Object> root = new HashMap<String, Object>();
Map<String, Object> groupsMap = new HashMap<String, Object>();
root.put("groups", groupsMap);
for (String groupKey : groups.keySet()) {
Group group = groups.get(groupKey);
// Group header
Map<String, Object> aGroupMap = new HashMap<String, Object>();
groupsMap.put(group.getName(), aGroupMap);
// Info nodes
Map<String, Object> infoMap = new HashMap<String, Object>();
aGroupMap.put("info", infoMap);
for (String infoKey : group.getVariables().getVarKeyList()) {
infoMap.put(infoKey, group.getVariables().getVarObject(infoKey));
}
// Permission nodes
aGroupMap.put("permissions", group.getPermissionList());
}
if (!root.isEmpty()) {
DumperOptions opt = new DumperOptions();
opt.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
final Yaml yaml = new Yaml(opt);
try {
yaml.dump(root, new OutputStreamWriter(new FileOutputStream(GlobalGroupsFile), "UTF-8"));
} catch (UnsupportedEncodingException ex) {
} catch (FileNotFoundException ex) {
}
}
setTimeStampGroups(GlobalGroupsFile.lastModified());
} else {
// Newer file found.
GroupManager.logger.log(Level.WARNING, "Newer GlobalGroups file found, but we have local changes!");
throw new IllegalStateException("Unable to save unless you issue a '/mansave force'");
}
removeGroupsChangedFlag();
} else {
//Check for newer file as no local changes.
if (getTimeStampGroups() < GlobalGroupsFile.lastModified()) {
System.out.print("Newer GlobalGroups file found (Loading changes)!");
// Backup GlobalGroups file
backupFile();
load();
}
}
}
/**
* Backup the BlobalGroups file
* @param w
*/
private void backupFile() {
File backupFile = new File(plugin.getBackupFolder(), "bkp_ggroups_" + Tasks.getDateString() + ".yml");
try {
Tasks.copy(GlobalGroupsFile, backupFile);
} catch (IOException ex) {
GroupManager.logger.log(Level.SEVERE, null, ex);
}
}
/**
* Adds a group, or replaces an existing one.
*
* @param groupToAdd
*/
public void addGroup(Group groupToAdd) {
// Create a new group if it already exists
if (hasGroup(groupToAdd.getName())) {
groupToAdd = groupToAdd.clone();
removeGroup(groupToAdd.getName());
}
newGroup(groupToAdd);
haveGroupsChanged = true;
}
/**
* Creates a new group if it doesn't already exist.
*
* @param newGroup
*/
public Group newGroup(Group newGroup) {
// Push a new group
if (!groups.containsKey(newGroup.getName().toLowerCase())) {
groups.put(newGroup.getName().toLowerCase(), newGroup);
this.setGroupsChanged(true);
return newGroup;
}
return null;
}
/**
* Delete a group if it exist.
*
* @param groupName
*/
public boolean removeGroup(String groupName) {
// Push a new group
if (groups.containsKey(groupName.toLowerCase())) {
groups.remove(groupName.toLowerCase());
this.setGroupsChanged(true);
return true;
}
return false;
}
/**
* Returns true if the Global Group exists in the globalgroups.yml
*
* @param groupName
* @return true if the group exists
*/
public boolean hasGroup(String groupName) {
return groups.containsKey(groupName.toLowerCase());
}
/**
* Returns true if the group has the correct permission node.
*
* @param groupName
* @param permissionNode
* @return true if node exists
*/
public boolean hasPermission(String groupName, String permissionNode) {
if (!hasGroup(groupName.toLowerCase()))
return false;
return groups.get(groupName.toLowerCase()).hasSamePermissionNode(permissionNode);
}
/**
* Returns a PermissionCheckResult of the permission node for the group to
* be tested against.
*
* @param groupName
* @param permissionNode
* @return PermissionCheckResult object
*/
public PermissionCheckResult checkPermission(String groupName, String permissionNode) {
PermissionCheckResult result = new PermissionCheckResult();
result.askedPermission = permissionNode;
result.resultType = PermissionCheckResult.Type.NOTFOUND;
if (!hasGroup(groupName.toLowerCase()))
return result;
Group tempGroup = groups.get(groupName.toLowerCase());
if (tempGroup.hasSamePermissionNode(permissionNode))
result.resultType = PermissionCheckResult.Type.FOUND;
if (tempGroup.hasSamePermissionNode("-" + permissionNode))
result.resultType = PermissionCheckResult.Type.NEGATION;
if (tempGroup.hasSamePermissionNode("+" + permissionNode))
result.resultType = PermissionCheckResult.Type.EXCEPTION;
return result;
}
/**
* Returns a List of all permission nodes for this group null if none
*
* @param groupName
* @return List of all group names
*/
public List<String> getGroupsPermissions(String groupName) {
if (!hasGroup(groupName.toLowerCase()))
return null;
return groups.get(groupName.toLowerCase()).getPermissionList();
}
/**
* Returns a Set of all global group names.
*
* @return Set containing all group names.
*/
public Set<String> getGlobalGroups() {
return groups.keySet();
}
/**
* Resets GlobalGroups.
*/
public void resetGlobalGroups() {
this.groups = new HashMap<String, Group>();
}
/**
*
* @return a collection of the groups
*/
public Collection<Group> getGroupList() {
return groups.values();
}
/**
* Returns the Global Group or null if it doesn't exist.
*
* @param groupName
* @return Group object
*/
public Group getGroup(String groupName) {
if (!hasGroup(groupName.toLowerCase()))
return null;
return groups.get(groupName.toLowerCase());
}
/**
* @return the globalGroupsFile
*/
public File getGlobalGroupsFile() {
return GlobalGroupsFile;
}
/**
*
*/
public void removeGroupsChangedFlag() {
setGroupsChanged(false);
for (Group g : groups.values()) {
g.flagAsSaved();
}
}
}

View File

@@ -26,7 +26,11 @@ public abstract class DataUnit {
this.name = name; this.name = name;
} }
/** public DataUnit(String name) {
this.name = name;
}
/**
* Every group is matched only by their names and DataSources names. * Every group is matched only by their names and DataSources names.
* @param o * @param o
* @return true if they are equal. false if not. * @return true if they are equal. false if not.
@@ -64,7 +68,15 @@ public abstract class DataUnit {
} }
public void flagAsChanged() { public void flagAsChanged() {
GroupManager.logger.finest("DataSource: " + getDataSource().getName() + " - DataUnit: " + getName() + " flagged as changed!"); WorldDataHolder testSource = getDataSource();
String source = "";
if (testSource == null)
source = "GlobalGroups";
else
source = testSource.getName();
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getName() + " flagged as changed!");
// for(StackTraceElement st: Thread.currentThread().getStackTrace()){ // for(StackTraceElement st: Thread.currentThread().getStackTrace()){
// GroupManager.logger.finest(st.toString()); // GroupManager.logger.finest(st.toString());
// } // }
@@ -76,7 +88,15 @@ public abstract class DataUnit {
} }
public void flagAsSaved() { public void flagAsSaved() {
GroupManager.logger.finest("DataSource: " + getDataSource().getName() + " - DataUnit: " + getName() + " flagged as saved!"); WorldDataHolder testSource = getDataSource();
String source = "";
if (testSource == null)
source = "GlobalGroups";
else
source = testSource.getName();
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getName() + " flagged as saved!");
changed = false; changed = false;
} }

View File

@@ -27,12 +27,22 @@ public class Group extends DataUnit implements Cloneable {
private GroupVariables variables = new GroupVariables(this); private GroupVariables variables = new GroupVariables(this);
/** /**
* Constructor for individual World Groups.
* *
* @param name * @param name
*/ */
public Group(WorldDataHolder source, String name) { public Group(WorldDataHolder source, String name) {
super(source, name); super(source, name);
} }
/**
* Constructor for Global Groups.
*
* @param name
*/
public Group(String name) {
super(name);
}
/** /**
* Clone this group * Clone this group
@@ -40,8 +50,15 @@ public class Group extends DataUnit implements Cloneable {
*/ */
@Override @Override
public Group clone() { public Group clone() {
Group clone = new Group(getDataSource(), this.getName()); Group clone;
clone.inherits = new ArrayList<String>(this.getInherits());
if (getDataSource() == null) {
clone = new Group(this.getName());
} else {
clone = new Group(getDataSource(), this.getName());
clone.inherits = new ArrayList<String>(this.getInherits());
}
for (String perm : this.getPermissionList()) { for (String perm : this.getPermissionList()) {
clone.addPermission(perm); clone.addPermission(perm);
} }
@@ -59,8 +76,13 @@ public class Group extends DataUnit implements Cloneable {
if (dataSource.groupExists(this.getName())) { if (dataSource.groupExists(this.getName())) {
return null; return null;
} }
Group clone = getDataSource().createGroup(this.getName());
clone.inherits = new ArrayList<String>(this.getInherits()); Group clone = dataSource.createGroup(this.getName());
// Don't add inheritance for GlobalGroups
if (getDataSource() != null) {
clone.inherits = new ArrayList<String>(this.getInherits());
}
for (String perm : this.getPermissionList()) { for (String perm : this.getPermissionList()) {
clone.addPermission(perm); clone.addPermission(perm);
} }

View File

@@ -46,7 +46,7 @@ public class GroupVariables extends Variables implements Cloneable {
/** /**
* A clone of all vars here. * A clone of all vars here.
* @return * @return GroupVariables clone
*/ */
protected GroupVariables clone(Group newOwner) { protected GroupVariables clone(Group newOwner) {
GroupVariables clone = new GroupVariables(newOwner); GroupVariables clone = new GroupVariables(newOwner);

View File

@@ -40,7 +40,7 @@ public class User extends DataUnit implements Cloneable {
/** /**
* *
* @return * @return User clone
*/ */
@Override @Override
public User clone() { public User clone() {
@@ -67,7 +67,7 @@ public class User extends DataUnit implements Cloneable {
if (dataSource.getGroup(group) == null) { if (dataSource.getGroup(group) == null) {
clone.setGroup(dataSource.getDefaultGroup()); clone.setGroup(dataSource.getDefaultGroup());
} else { } else {
clone.setGroup(this.getGroupName()); clone.setGroup(dataSource.getGroup(this.getGroupName()));
} }
for (String perm : this.getPermissionList()) { for (String perm : this.getPermissionList()) {
clone.addPermission(perm); clone.addPermission(perm);
@@ -117,13 +117,20 @@ public class User extends DataUnit implements Cloneable {
getDataSource().addGroup(group); getDataSource().addGroup(group);
} }
group = getDataSource().getGroup(group.getName()); group = getDataSource().getGroup(group.getName());
String oldGroup = this.group;
this.group = group.getName(); this.group = group.getName();
flagAsChanged(); flagAsChanged();
if (GroupManager.isLoaded()) { if (GroupManager.isLoaded()) {
if (GroupManager.BukkitPermissions.player_join = false) if (GroupManager.BukkitPermissions.player_join = false)
GroupManager.BukkitPermissions.updateAllPlayers(); GroupManager.BukkitPermissions.updateAllPlayers();
// Do we notify of the group change?
String defaultGroupName = getDataSource().getDefaultGroup().getName();
// if we were not in the default group
// or we were in the default group and the move is to a different group.
boolean notify = (!oldGroup.equalsIgnoreCase(defaultGroupName)) || ((oldGroup.equalsIgnoreCase(defaultGroupName)) && (!this.group.equalsIgnoreCase(defaultGroupName))) ;
GroupManager.notify(this.getName(), String.format(" moved to the group %s.", group.getName())); if (notify) GroupManager.notify(this.getName(), String.format(" moved to the group %s.", group.getName()));
} }
} }

View File

@@ -27,7 +27,7 @@ public class UserVariables extends Variables {
/** /**
* A clone of all vars here. * A clone of all vars here.
* @return * @return UserVariables clone
*/ */
protected UserVariables clone(User newOwner) { protected UserVariables clone(User newOwner) {
UserVariables clone = new UserVariables(newOwner); UserVariables clone = new UserVariables(newOwner);

View File

@@ -115,7 +115,7 @@ public abstract class Variables implements Cloneable {
/** /**
* All variable keys this is holding * All variable keys this is holding
* @return * @return Set of all variable names.
*/ */
public Set<String> getVarKeyList() { public Set<String> getVarKeyList() {
return variables.keySet(); return variables.keySet();

View File

@@ -39,7 +39,7 @@ public class OverloadedWorldHolder extends WorldDataHolder {
/** /**
* *
* @param userName * @param userName
* @return * @return user object or a new user if none exists.
*/ */
@Override @Override
public User getUser(String userName) { public User getUser(String userName) {
@@ -86,7 +86,7 @@ public class OverloadedWorldHolder extends WorldDataHolder {
/** /**
* *
* @param userName * @param userName
* @return * @return true if removed/false if not found.
*/ */
@Override @Override
public boolean removeUser(String userName) { public boolean removeUser(String userName) {
@@ -137,7 +137,7 @@ public class OverloadedWorldHolder extends WorldDataHolder {
/** /**
* *
* @return * @return Collection of all users
*/ */
@Override @Override
public Collection<User> getUserList() { public Collection<User> getUserList() {
@@ -156,7 +156,7 @@ public class OverloadedWorldHolder extends WorldDataHolder {
/** /**
* *
* @param userName * @param userName
* @return * @return true if user is overloaded.
*/ */
public boolean isOverloaded(String userName) { public boolean isOverloaded(String userName) {
return overloadedUsers.containsKey(userName.toLowerCase()); return overloadedUsers.containsKey(userName.toLowerCase());
@@ -189,8 +189,9 @@ public class OverloadedWorldHolder extends WorldDataHolder {
* Gets the user in normal state. Surpassing the overload state. * Gets the user in normal state. Surpassing the overload state.
* It doesn't affect permissions. But it enables plugins change the * It doesn't affect permissions. But it enables plugins change the
* actual user permissions even in overload mode. * actual user permissions even in overload mode.
*
* @param userName * @param userName
* @return * @return user object
*/ */
public User surpassOverload(String userName) { public User surpassOverload(String userName) {
if (!isOverloaded(userName)) { if (!isOverloaded(userName)) {

View File

@@ -38,27 +38,30 @@ import org.yaml.snakeyaml.reader.UnicodeReader;
public class WorldDataHolder { public class WorldDataHolder {
/** /**
* * World name
*/ */
protected String name; protected String name;
/** /**
* The actual groups holder * The actual groups holder
*/ */
protected Map<String, Group> groups = new HashMap<String, Group>(); protected Map<String, Group> groups = new HashMap<String, Group>();
/** /**
* The actual users holder * The actual users holder
*/ */
protected Map<String, User> users = new HashMap<String, User>(); protected Map<String, User> users = new HashMap<String, User>();
/**
/**
* Points to the default group * Points to the default group
*/ */
protected Group defaultGroup = null; protected Group defaultGroup = null;
/** /**
* The file, which this class loads/save data from/to * The file, which this class loads/save data from/to
* @deprecated * @deprecated
*/ */
@Deprecated @Deprecated
protected File f; protected File f;
/** /**
* *
*/ */
@@ -79,8 +82,17 @@ public class WorldDataHolder {
* *
*/ */
protected boolean haveGroupsChanged = false; protected boolean haveGroupsChanged = false;
/** /**
*
*/
protected long timeStampGroups = 0;
/**
*
*/
protected long timeStampUsers = 0;
/**
* Prevent direct instantiation * Prevent direct instantiation
* @param worldName * @param worldName
*/ */
@@ -151,7 +163,7 @@ public class WorldDataHolder {
/** /**
* *
* @param userName * @param userName
* @return * @return true if we have data for this player.
*/ */
public boolean isUserDeclared(String userName) { public boolean isUserDeclared(String userName) {
return users.containsKey(userName.toLowerCase()); return users.containsKey(userName.toLowerCase());
@@ -183,7 +195,10 @@ public class WorldDataHolder {
* @return a group if it is found. null if not found. * @return a group if it is found. null if not found.
*/ */
public Group getGroup(String groupName) { public Group getGroup(String groupName) {
return groups.get(groupName.toLowerCase()); if (groupName.startsWith("g:"))
return GroupManager.getGlobalGroups().getGroup(groupName);
else
return groups.get(groupName.toLowerCase());
} }
/** /**
@@ -193,7 +208,10 @@ public class WorldDataHolder {
* @return true if exists. false if not. * @return true if exists. false if not.
*/ */
public boolean groupExists(String groupName) { public boolean groupExists(String groupName) {
return groups.containsKey(groupName.toLowerCase()); if (groupName.startsWith("g:"))
return GroupManager.getGlobalGroups().hasGroup(groupName);
else
return groups.containsKey(groupName.toLowerCase());
} }
/** /**
@@ -201,6 +219,11 @@ public class WorldDataHolder {
* @param groupToAdd * @param groupToAdd
*/ */
public void addGroup(Group groupToAdd) { public void addGroup(Group groupToAdd) {
if (groupToAdd.getName().startsWith("g:")) {
GroupManager.getGlobalGroups().addGroup(groupToAdd);
return;
}
if (groupToAdd.getDataSource() != this) { if (groupToAdd.getDataSource() != this) {
groupToAdd = groupToAdd.clone(this); groupToAdd = groupToAdd.clone(this);
} }
@@ -215,6 +238,10 @@ public class WorldDataHolder {
* @return true if had something to remove. false the group was default or non-existant * @return true if had something to remove. false the group was default or non-existant
*/ */
public boolean removeGroup(String groupName) { public boolean removeGroup(String groupName) {
if (groupName.startsWith("g:")) {
return GroupManager.getGlobalGroups().removeGroup(groupName);
}
if (defaultGroup != null && groupName.equalsIgnoreCase(defaultGroup.getName())) { if (defaultGroup != null && groupName.equalsIgnoreCase(defaultGroup.getName())) {
return false; return false;
} }
@@ -251,10 +278,16 @@ public class WorldDataHolder {
* @return null if group already exists. or new Group * @return null if group already exists. or new Group
*/ */
public Group createGroup(String groupName) { public Group createGroup(String groupName) {
if (this.groups.containsKey(groupName.toLowerCase())) { if (groupName.startsWith("g:")) {
Group newGroup = new Group(groupName);
return GroupManager.getGlobalGroups().newGroup(newGroup);
}
if (this.groups.containsKey(groupName.toLowerCase())) {
return null; return null;
} }
Group newGroup = new Group(this, groupName);
Group newGroup = new Group(this, groupName);
this.addGroup(newGroup); this.addGroup(newGroup);
haveGroupsChanged = true; haveGroupsChanged = true;
return newGroup; return newGroup;
@@ -281,14 +314,68 @@ public class WorldDataHolder {
*/ */
public void reload() { public void reload() {
try { try {
WorldDataHolder ph = load(this.getName(), getGroupsFile(), getUsersFile()); reloadGroups();
this.defaultGroup = ph.defaultGroup; reloadUsers();
this.groups = ph.groups;
this.users = ph.users;
} catch (Exception ex) { } catch (Exception ex) {
Logger.getLogger(WorldDataHolder.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(WorldDataHolder.class.getName()).log(Level.SEVERE, null, ex);
} }
} }
/**
* Refresh Group data from file
*/
public void reloadGroups() {
GroupManager.setLoaded(false);
try {
// temporary holder in case the load fails.
WorldDataHolder ph = new WorldDataHolder(this.getName());
loadGroups(ph, getGroupsFile());
// transfer new data
resetGroups();
for (Group tempGroup : ph.getGroupList()) {
tempGroup.clone(this);
}
this.setDefaultGroup(this.getGroup(ph.getDefaultGroup().getName()));
this.removeGroupsChangedFlag();
this.timeStampGroups = ph.getTimeStampGroups();
ph = null;
} catch (Exception ex) {
Logger.getLogger(WorldDataHolder.class.getName()).log(Level.WARNING, null, ex);
}
GroupManager.setLoaded(true);
}
/**
* Refresh Users data from file
*/
public void reloadUsers() {
GroupManager.setLoaded(false);
try {
// temporary holder in case the load fails.
WorldDataHolder ph = new WorldDataHolder(this.getName());
// copy groups for reference
for (Group tempGroup : this.getGroupList()) {
tempGroup.clone(ph);
}
// setup the default group before loading user data.
ph.setDefaultGroup(ph.getGroup(this.getDefaultGroup().getName()));
loadUsers(ph, getUsersFile());
// transfer new data
resetUsers();
for (User tempUser : ph.getUserList()) {
tempUser.clone(this);
}
this.removeUsersChangedFlag();
this.timeStampUsers = ph.getTimeStampUsers();
ph = null;
} catch (Exception ex) {
Logger.getLogger(WorldDataHolder.class.getName()).log(Level.WARNING, null, ex);
}
GroupManager.setLoaded(true);
}
/** /**
* Save by yourself! * Save by yourself!
@@ -302,9 +389,11 @@ public class WorldDataHolder {
/** /**
* Returns a data holder for the given file * Returns a data holder for the given file
*
* @param worldName * @param worldName
* @param file * @param file
* @return * @return a new WorldDataHolder
*
* @throws Exception * @throws Exception
* @deprecated * @deprecated
*/ */
@@ -448,26 +537,43 @@ public class WorldDataHolder {
} }
/** /**
* Returns a data holder for the given file * Returns a NEW data holder containing data read from the files
*
* @param worldName * @param worldName
* @param groupsFile * @param groupsFile
* @param usersFile * @param usersFile
* @return *
* @throws FileNotFoundException
* @throws IOException
*/
public static WorldDataHolder load(String worldName, File groupsFile, File usersFile) throws FileNotFoundException, IOException {
WorldDataHolder ph = new WorldDataHolder(worldName);
GroupManager.setLoaded(false);
loadGroups(ph, groupsFile);
loadUsers(ph, usersFile);
GroupManager.setLoaded(true);
return ph;
}
/**
* Updates the WorldDataHolder from the Groups file
*
* @param ph
* @param groupsFile
*
* @throws FileNotFoundException * @throws FileNotFoundException
* @throws IOException * @throws IOException
*/ */
@SuppressWarnings({"rawtypes", "unchecked"}) @SuppressWarnings({"rawtypes", "unchecked"})
public static WorldDataHolder load(String worldName, File groupsFile, File usersFile) throws FileNotFoundException, IOException { protected static void loadGroups(WorldDataHolder ph, File groupsFile) throws FileNotFoundException, IOException {
WorldDataHolder ph = new WorldDataHolder(worldName);
ph.groupsFile = groupsFile;
ph.usersFile = usersFile;
//READ GROUPS FILE //READ GROUPS FILE
Yaml yamlGroups = new Yaml(new SafeConstructor()); Yaml yamlGroups = new Yaml(new SafeConstructor());
Map<String, Object> groupsRootDataNode; Map<String, Object> groupsRootDataNode;
if (!groupsFile.exists()) { if (!groupsFile.exists()) {
throw new IllegalArgumentException("The file which should contain permissions does not exist!\n" + groupsFile.getPath()); throw new IllegalArgumentException("The file which should contain groups does not exist!\n" + groupsFile.getPath());
} }
FileInputStream groupsInputStream = new FileInputStream(groupsFile); FileInputStream groupsInputStream = new FileInputStream(groupsFile);
try { try {
@@ -483,7 +589,7 @@ public class WorldDataHolder {
//PROCESS GROUPS FILE //PROCESS GROUPS FILE
Map<String, List<String>> inheritance = new HashMap<String, List<String>>(); Map<String, List<String>> inheritance = new HashMap<String, List<String>>();
try { //try {
Map<String, Object> allGroupsNode = (Map<String, Object>) groupsRootDataNode.get("groups"); Map<String, Object> allGroupsNode = (Map<String, Object>) groupsRootDataNode.get("groups");
for (String groupKey : allGroupsNode.keySet()) { for (String groupKey : allGroupsNode.keySet()) {
Map<String, Object> thisGroupNode = (Map<String, Object>) allGroupsNode.get(groupKey); Map<String, Object> thisGroupNode = (Map<String, Object>) allGroupsNode.get(groupKey);
@@ -496,7 +602,7 @@ public class WorldDataHolder {
} }
if ((Boolean.parseBoolean(thisGroupNode.get("default").toString()))) { if ((Boolean.parseBoolean(thisGroupNode.get("default").toString()))) {
if (ph.getDefaultGroup() != null) { if (ph.getDefaultGroup() != null) {
GroupManager.logger.warning("The group " + thisGrp.getName() + " is declaring be default where" + ph.getDefaultGroup().getName() + " already was."); GroupManager.logger.warning("The group " + thisGrp.getName() + " is claiming to be default where" + ph.getDefaultGroup().getName() + " already was.");
GroupManager.logger.warning("Overriding first request."); GroupManager.logger.warning("Overriding first request.");
} }
ph.setDefaultGroup(thisGrp); ph.setDefaultGroup(thisGrp);
@@ -513,36 +619,43 @@ public class WorldDataHolder {
} else if (thisGroupNode.get("permissions") instanceof String) { } else if (thisGroupNode.get("permissions") instanceof String) {
thisGrp.addPermission((String) thisGroupNode.get("permissions")); thisGrp.addPermission((String) thisGroupNode.get("permissions"));
} else { } else {
throw new IllegalArgumentException("Unknown type of permissions node(Should be String or List<String>): " + thisGroupNode.get("permissions").getClass().getName()); throw new IllegalArgumentException("Unknown type of permissions node(Should be String or List<String>) for group: " + thisGrp.getName());
} }
//INFO NODE //INFO NODE
Map<String, Object> infoNode = (Map<String, Object>) thisGroupNode.get("info"); if (thisGroupNode.get("info") instanceof Map) {
if (infoNode != null) { Map<String, Object> infoNode = (Map<String, Object>) thisGroupNode.get("info");
thisGrp.setVariables(infoNode); if (infoNode != null) {
} thisGrp.setVariables(infoNode);
}
} else
throw new IllegalArgumentException("Unknown entry found in Info section for group: " + thisGrp.getName());
//END INFO NODE //END INFO NODE
Object inheritNode = thisGroupNode.get("inheritance"); if (thisGroupNode.get("inheritance") == null || thisGroupNode.get("inheritance") instanceof List) {
if (inheritNode == null) { Object inheritNode = thisGroupNode.get("inheritance");
thisGroupNode.put("inheritance", new ArrayList<String>()); if (inheritNode == null) {
} else if (inheritNode instanceof List) { thisGroupNode.put("inheritance", new ArrayList<String>());
List<String> groupsInh = (List<String>) inheritNode; } else if (inheritNode instanceof List) {
for (String grp : groupsInh) { List<String> groupsInh = (List<String>) inheritNode;
if (inheritance.get(groupKey) == null) { for (String grp : groupsInh) {
List<String> thisInherits = new ArrayList<String>(); if (inheritance.get(groupKey) == null) {
inheritance.put(groupKey, thisInherits); List<String> thisInherits = new ArrayList<String>();
} inheritance.put(groupKey, thisInherits);
inheritance.get(groupKey).add(grp); }
inheritance.get(groupKey).add(grp);
}
} }
}
}else
throw new IllegalArgumentException("Unknown entry found in inheritance section for group: " + thisGrp.getName());
} }
} catch (Exception ex) { //} catch (Exception ex) {
ex.printStackTrace(); // ex.printStackTrace();
throw new IllegalArgumentException("Your Permissions config file is invalid. See console for details."); // throw new IllegalArgumentException("Your Permissions config file is invalid. See console for details.");
} //}
if (ph.defaultGroup == null) { if (ph.defaultGroup == null) {
throw new IllegalArgumentException("There was no Default Group declared."); throw new IllegalArgumentException("There was no Default Group declared.");
} }
@@ -556,13 +669,32 @@ public class WorldDataHolder {
} }
} }
} }
ph.removeGroupsChangedFlag();
// Update the LastModified time.
ph.groupsFile = groupsFile;
ph.setTimeStampGroups(groupsFile.lastModified());
//return ph;
}
/**
* Updates the WorldDataHolder from the Users file
*
* @param ph
* @param usersFile
*
* @throws FileNotFoundException
* @throws IOException
*/
@SuppressWarnings({"rawtypes", "unchecked"})
protected static void loadUsers(WorldDataHolder ph, File usersFile) throws FileNotFoundException, IOException {
//READ USERS FILE //READ USERS FILE
Yaml yamlUsers = new Yaml(new SafeConstructor()); Yaml yamlUsers = new Yaml(new SafeConstructor());
Map<String, Object> usersRootDataNode; Map<String, Object> usersRootDataNode;
if (!groupsFile.exists()) { if (!usersFile.exists()) {
throw new IllegalArgumentException("The file which should contain permissions does not exist!\n" + usersFile.getPath()); throw new IllegalArgumentException("The file which should contain users does not exist!\n" + usersFile.getPath());
} }
FileInputStream usersInputStream = new FileInputStream(usersFile); FileInputStream usersInputStream = new FileInputStream(usersFile);
try { try {
@@ -581,7 +713,7 @@ public class WorldDataHolder {
// Stop loading if the file is empty // Stop loading if the file is empty
if (allUsersNode == null) if (allUsersNode == null)
return ph; return ;
for (String usersKey : allUsersNode.keySet()) { for (String usersKey : allUsersNode.keySet()) {
Map<String, Object> thisUserNode = (Map<String, Object>) allUsersNode.get(usersKey); Map<String, Object> thisUserNode = (Map<String, Object>) allUsersNode.get(usersKey);
@@ -644,7 +776,13 @@ public class WorldDataHolder {
thisUser.setGroup(ph.defaultGroup); thisUser.setGroup(ph.defaultGroup);
} }
} }
return ph;
ph.removeUsersChangedFlag();
// Update the LastModified time.
ph.usersFile = usersFile;
ph.setTimeStampUsers(usersFile.lastModified());
//return ph;
} }
/** /**
@@ -777,6 +915,11 @@ public class WorldDataHolder {
} catch (FileNotFoundException ex) { } catch (FileNotFoundException ex) {
} }
} }
// Update the LastModified time.
ph.groupsFile = groupsFile;
ph.setTimeStampGroups(groupsFile.lastModified());
ph.removeGroupsChangedFlag();
/*FileWriter tx = null; /*FileWriter tx = null;
try { try {
@@ -842,6 +985,12 @@ public class WorldDataHolder {
} catch (FileNotFoundException ex) { } catch (FileNotFoundException ex) {
} }
} }
// Update the LastModified time.
ph.usersFile = usersFile;
ph.setTimeStampUsers(usersFile.lastModified());
ph.removeUsersChangedFlag();
/*FileWriter tx = null; /*FileWriter tx = null;
try { try {
tx = new FileWriter(usersFile, false); tx = new FileWriter(usersFile, false);
@@ -894,7 +1043,7 @@ public class WorldDataHolder {
/** /**
* *
* @return * @return true if any user data has changed
*/ */
public boolean haveUsersChanged() { public boolean haveUsersChanged() {
if (haveUsersChanged) { if (haveUsersChanged) {
@@ -910,7 +1059,7 @@ public class WorldDataHolder {
/** /**
* *
* @return * @return true if any group data has changed.
*/ */
public boolean haveGroupsChanged() { public boolean haveGroupsChanged() {
if (haveGroupsChanged) { if (haveGroupsChanged) {
@@ -964,4 +1113,64 @@ public class WorldDataHolder {
public String getName() { public String getName() {
return name; return name;
} }
/**
* Resets Groups.
*/
public void resetGroups() {
this.defaultGroup = null;
this.groups = new HashMap<String, Group>();
}
/**
* Resets Users
*/
public void resetUsers() {
this.users = new HashMap<String, User>();
}
/**
* @return the groups
*/
public Map<String, Group> getGroups() {
return groups;
}
/**
* @return the users
*/
public Map<String, User> getUsers() {
return users;
}
/**
* @return the timeStampGroups
*/
public long getTimeStampGroups() {
return timeStampGroups;
}
/**
* @return the timeStampUsers
*/
public long getTimeStampUsers() {
return timeStampUsers;
}
/**
* @param timeStampGroups the timeStampGroups to set
*/
protected void setTimeStampGroups(long timeStampGroups) {
this.timeStampGroups = timeStampGroups;
}
/**
* @param timeStampUsers the timeStampUsers to set
*/
protected void setTimeStampUsers(long timeStampUsers) {
this.timeStampUsers = timeStampUsers;
}
public void setTimeStamps() {
if (groupsFile != null)
setTimeStampGroups(groupsFile.lastModified());
if (usersFile != null)
setTimeStampUsers(usersFile.lastModified());
}
} }

View File

@@ -100,7 +100,7 @@ public class WorldsHolder {
* or mirrored worlds that don't need data. * or mirrored worlds that don't need data.
*/ */
if (!worldsData.containsKey(folder.getName().toLowerCase()) if (!worldsData.containsKey(folder.getName().toLowerCase())
|| !mirrors.containsKey(folder.getName().toLowerCase())) { && !mirrors.containsKey(folder.getName().toLowerCase())) {
loadWorld(folder.getName()); loadWorld(folder.getName());
} }
@@ -149,6 +149,8 @@ public class WorldsHolder {
w.reload(); w.reload();
alreadyDone.add(w); alreadyDone.add(w);
} }
// Load global groups
GroupManager.getGlobalGroups().load();
} }
/** /**
@@ -158,44 +160,98 @@ public class WorldsHolder {
public void reloadWorld(String worldName) { public void reloadWorld(String worldName) {
getWorldData(worldName).reload(); getWorldData(worldName).reload();
} }
/**
* Wrapper to retain backwards compatibility
* (call this function to auto overwrite files)
*/
public void saveChanges() {
saveChanges(true);
}
/** /**
* *
*/ */
public void saveChanges() { public void saveChanges(boolean overwrite) {
ArrayList<WorldDataHolder> alreadyDone = new ArrayList<WorldDataHolder>(); ArrayList<WorldDataHolder> alreadyDone = new ArrayList<WorldDataHolder>();
Tasks.removeOldFiles(plugin, plugin.getBackupFolder());
for (OverloadedWorldHolder w : worldsData.values()) { for (OverloadedWorldHolder w : worldsData.values()) {
if (alreadyDone.contains(w)) { if (alreadyDone.contains(w)) {
continue; continue;
} }
Tasks.removeOldFiles(plugin, plugin.getBackupFolder());
if (w == null) { if (w == null) {
GroupManager.logger.severe("WHAT HAPPENED?"); GroupManager.logger.severe("WHAT HAPPENED?");
continue; continue;
} }
if (w.haveGroupsChanged()) { if (w.haveGroupsChanged()) {
//String groupsFolderName = w.getGroupsFile().getParentFile().getName(); if (overwrite || (!overwrite && (w.getTimeStampGroups() >= w.getGroupsFile().lastModified()))) {
File backupGroups = new File(plugin.getBackupFolder(), "bkp_" + w.getName() + "_g_" + Tasks.getDateString() + ".yml"); // Backup Groups file
try { backupFile(w,true);
Tasks.copy(w.getGroupsFile(), backupGroups);
} catch (IOException ex) { WorldDataHolder.writeGroups(w, w.getGroupsFile());
GroupManager.logger.log(Level.SEVERE, null, ex); //w.removeGroupsChangedFlag();
} } else {
WorldDataHolder.writeGroups(w, w.getGroupsFile()); // Newer file found.
w.removeGroupsChangedFlag(); GroupManager.logger.log(Level.WARNING, "Newer Groups file found for " + w.getName() + ", but we have local changes!");
throw new IllegalStateException("Unable to save unless you issue a '/mansave force'");
}
} else {
//Check for newer file as no local changes.
if (w.getTimeStampGroups() < w.getGroupsFile().lastModified()) {
System.out.print("Newer Groups file found (Loading changes)!");
// Backup Groups file
backupFile(w,true);
w.reloadGroups();
}
} }
if (w.haveUsersChanged()) { if (w.haveUsersChanged()) {
File backupUsers = new File(plugin.getBackupFolder(), "bkp_" + w.getName() + "_u_" + Tasks.getDateString() + ".yml"); if (overwrite || (!overwrite && (w.getTimeStampUsers() >= w.getUsersFile().lastModified()))) {
try { // Backup Users file
Tasks.copy(w.getUsersFile(), backupUsers); backupFile(w,false);
} catch (IOException ex) {
GroupManager.logger.log(Level.SEVERE, null, ex); WorldDataHolder.writeUsers(w, w.getUsersFile());
} //w.removeUsersChangedFlag();
WorldDataHolder.writeUsers(w, w.getUsersFile()); } else {
w.removeUsersChangedFlag(); // Newer file found.
GroupManager.logger.log(Level.WARNING, "Newer Users file found for " + w.getName() + ", but we have local changes!");
throw new IllegalStateException("Unable to save unless you issue a '/mansave force'");
}
} else {
//Check for newer file as no local changes.
if (w.getTimeStampUsers() < w.getUsersFile().lastModified()) {
System.out.print("Newer Users file found (Loading changes)!");
// Backup Users file
backupFile(w,false);
w.reloadUsers();
}
} }
alreadyDone.add(w); alreadyDone.add(w);
} }
// Write Global Groups
if (GroupManager.getGlobalGroups().haveGroupsChanged()) {
GroupManager.getGlobalGroups().writeGroups(overwrite);
} else {
if (GroupManager.getGlobalGroups().getTimeStampGroups() < GroupManager.getGlobalGroups().getGlobalGroupsFile().lastModified()) {
System.out.print("Newer GlobalGroups file found (Loading changes)!");
GroupManager.getGlobalGroups().load();
}
}
}
/**
* Backup the Groups/Users file
* @param w
* @param groups
*/
private void backupFile(OverloadedWorldHolder w, Boolean groups) {
File backupFile = new File(plugin.getBackupFolder(), "bkp_" + w.getName() + (groups ? "_g_" : "_u_") + Tasks.getDateString() + ".yml");
try {
Tasks.copy((groups ? w.getGroupsFile() : w.getUsersFile()), backupFile);
} catch (IOException ex) {
GroupManager.logger.log(Level.SEVERE, null, ex);
}
} }
/** /**
@@ -209,7 +265,7 @@ public class WorldsHolder {
* Mirrors prevails original data. * Mirrors prevails original data.
* *
* @param worldName * @param worldName
* @return * @return OverloadedWorldHolder
*/ */
public OverloadedWorldHolder getWorldData(String worldName) { public OverloadedWorldHolder getWorldData(String worldName) {
OverloadedWorldHolder data = worldsData.get(worldName.toLowerCase()); OverloadedWorldHolder data = worldsData.get(worldName.toLowerCase());
@@ -239,31 +295,31 @@ public class WorldsHolder {
} }
/** /**
* Retrieves the field p.getWorld().getName() and do * Retrieves the field player.getWorld().getName() and do
* getWorld(worldName) * getWorld(worldName)
* @param p * @param player
* @return * @return OverloadedWorldHolder
*/ */
public OverloadedWorldHolder getWorldData(Player p) { public OverloadedWorldHolder getWorldData(Player player) {
return getWorldData(p.getWorld().getName()); return getWorldData(player.getWorld().getName());
} }
/** /**
* It does getWorld(worldName).getPermissionsHandler() * It does getWorld(worldName).getPermissionsHandler()
* @param worldName * @param worldName
* @return * @return AnjoPermissionsHandler
*/ */
public AnjoPermissionsHandler getWorldPermissions(String worldName) { public AnjoPermissionsHandler getWorldPermissions(String worldName) {
return getWorldData(worldName).getPermissionsHandler(); return getWorldData(worldName).getPermissionsHandler();
} }
/** /**
*It does getWorldData(p).getPermission * Returns the PermissionsHandler for this player data
* @param p * @param player
* @return * @return AnjoPermissionsHandler
*/ */
public AnjoPermissionsHandler getWorldPermissions(Player p) { public AnjoPermissionsHandler getWorldPermissions(Player player) {
return getWorldData(p).getPermissionsHandler(); return getWorldData(player).getPermissionsHandler();
} }
/** /**
@@ -352,7 +408,7 @@ public class WorldsHolder {
* Copies the specified world data to another world * Copies the specified world data to another world
* @param fromWorld * @param fromWorld
* @param toWorld * @param toWorld
* @return * @return true if successfully copied.
*/ */
public boolean cloneWorld(String fromWorld, String toWorld) { public boolean cloneWorld(String fromWorld, String toWorld) {
File fromWorldFolder = new File(worldsFolder, fromWorld); File fromWorldFolder = new File(worldsFolder, fromWorld);
@@ -401,6 +457,10 @@ public class WorldsHolder {
} }
try { try {
OverloadedWorldHolder thisWorldData = new OverloadedWorldHolder(WorldDataHolder.load(worldName, groupsFile, usersFile)); OverloadedWorldHolder thisWorldData = new OverloadedWorldHolder(WorldDataHolder.load(worldName, groupsFile, usersFile));
// Set the file TimeStamps as it will be default from the initial load.
thisWorldData.setTimeStamps();
if (thisWorldData != null) { if (thisWorldData != null) {
GroupManager.logger.finest("Successful load of world " + worldName + "..."); GroupManager.logger.finest("Successful load of world " + worldName + "...");
worldsData.put(worldName.toLowerCase(), thisWorldData); worldsData.put(worldName.toLowerCase(), thisWorldData);
@@ -454,7 +514,7 @@ public class WorldsHolder {
/** /**
* Returns all physically loaded worlds. * Returns all physically loaded worlds.
* @return * @return ArrayList<OverloadedWorldHolder> of all loaded worlds
*/ */
public ArrayList<OverloadedWorldHolder> allWorldsDataList() { public ArrayList<OverloadedWorldHolder> allWorldsDataList() {
ArrayList<OverloadedWorldHolder> list = new ArrayList<OverloadedWorldHolder>(); ArrayList<OverloadedWorldHolder> list = new ArrayList<OverloadedWorldHolder>();

View File

@@ -150,8 +150,19 @@ public class BukkitPermissions {
value = true; value = true;
} }
if (value == true) if (value == true){
// Set the root permission
attachment.setPermission(permission, value); attachment.setPermission(permission, value);
// fetch and set all children of this permission node
Map<String, Boolean> children = permission.getChildren();
if (children != null) {
for (String child : children.keySet()) {
if (children.get(child))
attachment.setPermission(child, true);
}
}
}
} }
// Add any missing permissions for this player (non bukkit plugins) // Add any missing permissions for this player (non bukkit plugins)
@@ -171,6 +182,22 @@ public class BukkitPermissions {
player.recalculatePermissions(); player.recalculatePermissions();
} }
/**
* Returns a map of the child permissions as defined by the supplying plugin
* null is empty
*
* @param node
* @return Map of child permissions
*/
public Map<String, Boolean> getChildren(String node) {
for (Permission permission : registeredPermissions) {
if (permission.getName() == node) {
return permission.getChildren();
}
}
return null;
}
public List<String> listPerms(Player player) { public List<String> listPerms(Player player) {
List<String> perms = new ArrayList<String>(); List<String> perms = new ArrayList<String>();

View File

@@ -16,6 +16,7 @@ import org.bukkit.entity.Player;
* *
* @author Nijikokun * @author Nijikokun
* @author Gabriel Couto * @author Gabriel Couto
* @author ElgarL
*/ */
public abstract class PermissionsReaderInterface { public abstract class PermissionsReaderInterface {
@@ -23,7 +24,7 @@ public abstract class PermissionsReaderInterface {
* *
* @param player * @param player
* @param string * @param string
* @return * @return true if has permission
*/ */
public abstract boolean has(Player player, String string); public abstract boolean has(Player player, String string);
@@ -31,141 +32,141 @@ public abstract class PermissionsReaderInterface {
* *
* @param player * @param player
* @param string * @param string
* @return * @return true if has permission
*/ */
public abstract boolean permission(Player player, String string); public abstract boolean permission(Player player, String string);
/** /**
* *
* @param string * @param userName
* @return * @return group name for this player.
*/ */
public abstract String getGroup(String string); public abstract String getGroup(String userName);
/** /**
* *
* @param string * @param userName
* @param string1 * @param groupName
* @return * @return true if in group
*/ */
public abstract boolean inGroup(String string, String string1); public abstract boolean inGroup(String userName, String groupName);
/** /**
* *
* @param string * @param groupName
* @return * @return String of prefix
*/ */
public abstract String getGroupPrefix(String string); public abstract String getGroupPrefix(String groupName);
/** /**
* *
* @param string * @param groupName
* @return * @return String of suffix
*/ */
public abstract String getGroupSuffix(String string); public abstract String getGroupSuffix(String groupName);
/** /**
* *
* @param string * @param groupName
* @return * @return true if can build
*/ */
public abstract boolean canGroupBuild(String string); public abstract boolean canGroupBuild(String groupName);
/** /**
* *
* @param string * @param groupName
* @param string1 * @param node
* @return * @return String value
*/ */
public abstract String getGroupPermissionString(String string, String string1); public abstract String getGroupPermissionString(String groupName, String node);
/** /**
* *
* @param string * @param groupName
* @param string1 * @param node
* @return * @return integer value
*/ */
public abstract int getGroupPermissionInteger(String string, String string1); public abstract int getGroupPermissionInteger(String groupName, String node);
/** /**
* *
* @param string * @param groupName
* @param string1 * @param node
* @return * @return boolean value
*/ */
public abstract boolean getGroupPermissionBoolean(String string, String string1); public abstract boolean getGroupPermissionBoolean(String groupName, String node);
/** /**
* *
* @param string * @param groupName
* @param string1 * @param node
* @return * @return double value
*/ */
public abstract double getGroupPermissionDouble(String string, String string1); public abstract double getGroupPermissionDouble(String groupName, String node);
/** /**
* *
* @param string * @param userName
* @param string1 * @param node
* @return * @return String value
*/ */
public abstract String getUserPermissionString(String string, String string1); public abstract String getUserPermissionString(String userName, String node);
/** /**
* *
* @param string * @param userName
* @param string1 * @param node
* @return * @return integer value
*/ */
public abstract int getUserPermissionInteger(String string, String string1); public abstract int getUserPermissionInteger(String userName, String node);
/** /**
* *
* @param string * @param userName
* @param string1 * @param node
* @return * @return boolean value
*/ */
public abstract boolean getUserPermissionBoolean(String string, String string1); public abstract boolean getUserPermissionBoolean(String userName, String node);
/** /**
* *
* @param string * @param userName
* @param string1 * @param node
* @return * @return double value
*/ */
public abstract double getUserPermissionDouble(String string, String string1); public abstract double getUserPermissionDouble(String userName, String node);
/** /**
* *
* @param string * @param userName
* @param string1 * @param node
* @return * @return String value
*/ */
public abstract String getPermissionString(String string, String string1); public abstract String getPermissionString(String userName, String node);
/** /**
* *
* @param string * @param userName
* @param string1 * @param node
* @return * @return integer value
*/ */
public abstract int getPermissionInteger(String string, String string1); public abstract int getPermissionInteger(String userName, String node);
/** /**
* *
* @param string * @param userName
* @param string1 * @param node
* @return * @return boolean value
*/ */
public abstract boolean getPermissionBoolean(String string, String string1); public abstract boolean getPermissionBoolean(String userName, String node);
/** /**
* *
* @param string * @param userName
* @param string1 * @param node
* @return * @return double value
*/ */
public abstract double getPermissionDouble(String string, String string1); public abstract double getPermissionDouble(String userName, String node);
///////////////////////////// /////////////////////////////
/** /**
@@ -173,7 +174,7 @@ public abstract class PermissionsReaderInterface {
* This method is a utility method for chat plugins to get the user's prefix * This method is a utility method for chat plugins to get the user's prefix
* without having to look at every one of the user's ancestors. * without having to look at every one of the user's ancestors.
* Returns an empty string if user has no parent groups. * Returns an empty string if user has no parent groups.
* @param world Player's world *
* @param user Player's name * @param user Player's name
* @return Player's prefix * @return Player's prefix
*/ */
@@ -184,7 +185,7 @@ public abstract class PermissionsReaderInterface {
* This method is a utility method for chat plugins to get the user's suffix * This method is a utility method for chat plugins to get the user's suffix
* without having to look at every one of the user's ancestors. * without having to look at every one of the user's ancestors.
* Returns an empty string if user has no parent groups. * Returns an empty string if user has no parent groups.
* @param world Player's world *
* @param user Player's name * @param user Player's name
* @return Player's suffix * @return Player's suffix
*/ */
@@ -215,7 +216,7 @@ public abstract class PermissionsReaderInterface {
* @param entryName * @param entryName
* @param path * @param path
* @param isGroup * @param isGroup
* @return * @return -1 if not found
*/ */
public abstract double getInfoDouble(String entryName, String path, boolean isGroup); public abstract double getInfoDouble(String entryName, String path, boolean isGroup);
//public abstract double getInfoDouble(String entryName, String path, boolean isGroup, Comparator<Double> comparator); //public abstract double getInfoDouble(String entryName, String path, boolean isGroup, Comparator<Double> comparator);

View File

@@ -1,5 +1,5 @@
name: GroupManager name: GroupManager
version: "1.4 (Phoenix)" version: "1.5 (Phoenix)"
main: org.anjocaido.groupmanager.GroupManager main: org.anjocaido.groupmanager.GroupManager
website: http://www.anjocaido.info/ website: http://www.anjocaido.info/
description: Provides on-the-fly system for permissions system created by Nijikokun. But all in memory, and with flat-file saving schedule. description: Provides on-the-fly system for permissions system created by Nijikokun. But all in memory, and with flat-file saving schedule.

View File

@@ -4,12 +4,12 @@ users:
subgroups: [] subgroups: []
permissions: [] permissions: []
group: Admin group: Admin
mudzereli: KHobbits:
subgroups: [] subgroups: []
permissions: [] permissions: []
group: Builder group: Moderator
ElgarL: ElgarL:
subgroups: [] subgroups: []
permissions: [] permissions: []
group: Admin group: Owner

View File

@@ -0,0 +1 @@
DoNotUseThreads

View File

@@ -0,0 +1,37 @@
package com.earth2me.essentials.update;
import org.bukkit.plugin.Plugin;
public abstract class AbstractWorkListener
{
public AbstractWorkListener(final Plugin plugin, final VersionInfo newVersionInfo)
{
this.plugin = plugin;
this.newVersionInfo = newVersionInfo;
}
private final transient Plugin plugin;
private final transient VersionInfo newVersionInfo;
public final void onWorkAbort() {
onWorkAbort(null);
}
public abstract void onWorkAbort(String message);
public final void onWorkDone() {
onWorkDone(null);
}
public abstract void onWorkDone(String message);
public VersionInfo getNewVersionInfo()
{
return newVersionInfo;
}
public Plugin getPlugin()
{
return plugin;
}
}

View File

@@ -1,16 +1,16 @@
package com.earth2me.essentials.update; package com.earth2me.essentials.update;
import java.io.BufferedReader; import com.earth2me.essentials.update.chat.Command;
import java.io.File; import com.earth2me.essentials.update.chat.ConfigCommand;
import java.io.FileInputStream; import com.earth2me.essentials.update.chat.ErrorsCommand;
import java.io.IOException; import com.earth2me.essentials.update.chat.HelpCommand;
import java.io.InputStreamReader; import com.earth2me.essentials.update.chat.IrcBot;
import java.nio.charset.Charset; import com.earth2me.essentials.update.chat.ListCommand;
import java.util.logging.Level; import com.earth2me.essentials.update.chat.StartupCommand;
import java.util.logging.Logger; import com.earth2me.essentials.update.chat.UsernameUtil;
import java.util.regex.Matcher; import java.util.HashMap;
import java.util.regex.Pattern; import java.util.Locale;
import org.bukkit.Bukkit; import java.util.Map;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -21,7 +21,6 @@ import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.jibble.pircbot.User;
public class EssentialsHelp extends PlayerListener public class EssentialsHelp extends PlayerListener
@@ -29,14 +28,19 @@ public class EssentialsHelp extends PlayerListener
private transient Player chatUser; private transient Player chatUser;
private final transient Server server; private final transient Server server;
private final transient Plugin plugin; private final transient Plugin plugin;
private final static Charset UTF8 = Charset.forName("utf-8");
private transient IrcBot ircBot; private transient IrcBot ircBot;
private final transient Map<String, Command> commands = new HashMap<String, Command>();
public EssentialsHelp(final Plugin plugin) public EssentialsHelp(final Plugin plugin)
{ {
super(); super();
this.plugin = plugin; this.plugin = plugin;
this.server = plugin.getServer(); this.server = plugin.getServer();
commands.put("!help", new HelpCommand());
commands.put("!list", new ListCommand());
commands.put("!startup", new StartupCommand(plugin));
commands.put("!errors", new ErrorsCommand(plugin));
commands.put("!config", new ConfigCommand(plugin));
} }
public void registerEvents() public void registerEvents()
@@ -46,7 +50,7 @@ public class EssentialsHelp extends PlayerListener
pluginManager.registerEvent(Type.PLAYER_CHAT, this, Priority.Low, plugin); pluginManager.registerEvent(Type.PLAYER_CHAT, this, Priority.Low, plugin);
} }
public void onCommand(CommandSender sender) public void onCommand(final CommandSender sender)
{ {
if (sender instanceof Player && sender.hasPermission("essentials.helpchat")) if (sender instanceof Player && sender.hasPermission("essentials.helpchat"))
{ {
@@ -74,11 +78,7 @@ public class EssentialsHelp extends PlayerListener
public void onDisable() public void onDisable()
{ {
if ( ircBot != null) closeConnection();
{
ircBot.quit();
ircBot = null;
}
} }
private boolean sendChatMessage(final Player player, final String message) private boolean sendChatMessage(final Player player, final String message)
@@ -90,35 +90,19 @@ public class EssentialsHelp extends PlayerListener
} }
if (ircBot == null) if (ircBot == null)
{ {
if (messageCleaned.equalsIgnoreCase("yes")) return handleAnswer(messageCleaned, player);
{
player.sendMessage("Connecting...");
connectToIRC(player);
return true;
}
if (messageCleaned.equalsIgnoreCase("no") || message.equalsIgnoreCase("!quit"))
{
chatUser = null;
return true;
}
return false;
} }
else else
{ {
if (ircBot.isKicked()) { if (ircBot.isKicked())
chatUser = null; {
ircBot.quit(); closeConnection();
ircBot = null;
return false; return false;
} }
final String lowMessage = messageCleaned.toLowerCase(); final String lowMessage = messageCleaned.toLowerCase(Locale.ENGLISH);
if (lowMessage.startsWith("!quit")) if (lowMessage.startsWith("!quit"))
{ {
chatUser = null; closeConnection();
if (ircBot != null) {
ircBot.quit();
ircBot = null;
}
player.sendMessage("Connection closed."); player.sendMessage("Connection closed.");
return true; return true;
} }
@@ -126,52 +110,8 @@ public class EssentialsHelp extends PlayerListener
{ {
return false; return false;
} }
if (lowMessage.startsWith("!list")) if (handleCommands(lowMessage, player))
{ {
final User[] members = ircBot.getUsers();
final StringBuilder sb = new StringBuilder();
for (User user : members)
{
if (sb.length() > 0)
{
sb.append("§f, ");
}
if (user.isOp() || user.hasVoice())
{
sb.append("§6");
}
else
{
sb.append("§7");
}
sb.append(user.getPrefix()).append(user.getNick());
}
player.sendMessage(sb.toString());
return true;
}
if (lowMessage.startsWith("!help"))
{
player.sendMessage("Commands: (Note: Files send to the chat will be public viewable.)");
player.sendMessage("!errors - Send the last server errors to the chat.");
player.sendMessage("!startup - Send the last startup messages to the chat.");
player.sendMessage("!config - Sends your Essentials config to the chat.");
player.sendMessage("!list - List all players in chat.");
player.sendMessage("!quit - Leave chat.");
return true;
}
if (lowMessage.startsWith("!errors"))
{
sendErrors();
return true;
}
if (lowMessage.startsWith("!startup"))
{
sendStartup();
return true;
}
if (lowMessage.startsWith("!config"))
{
sendConfig();
return true; return true;
} }
ircBot.sendMessage(messageCleaned); ircBot.sendMessage(messageCleaned);
@@ -180,300 +120,62 @@ public class EssentialsHelp extends PlayerListener
} }
} }
private String buildIrcName() private void closeConnection()
{ {
final StringBuilder nameBuilder = new StringBuilder(); chatUser = null;
nameBuilder.append(chatUser.getName()); if (ircBot != null)
final Matcher versionMatch = Pattern.compile("git-Bukkit-([0-9]+).([0-9]+).([0-9]+)-[0-9]+-[0-9a-z]+-b([0-9]+)jnks.*").matcher(server.getVersion());
if (versionMatch.matches())
{ {
nameBuilder.append(" CB"); ircBot.quit();
nameBuilder.append(versionMatch.group(4)); ircBot = null;
} }
}
final Plugin essentials = server.getPluginManager().getPlugin("Essentials"); private boolean handleAnswer(final String message, final Player player)
if (essentials != null) {
if (message.equalsIgnoreCase("yes"))
{ {
nameBuilder.append(" ESS"); player.sendMessage("Connecting...");
nameBuilder.append(essentials.getDescription().getVersion()); connectToIRC(player);
return true;
} }
if (message.equalsIgnoreCase("no") || message.equalsIgnoreCase("!quit"))
final Plugin groupManager = server.getPluginManager().getPlugin("GroupManager");
if (groupManager != null)
{ {
nameBuilder.append(" GM"); chatUser = null;
if (!groupManager.isEnabled()) return true;
{
nameBuilder.append('!');
}
} }
return false;
}
final Plugin pex = server.getPluginManager().getPlugin("PermissionsEx"); private boolean handleCommands(final String lowMessage, final Player player)
if (pex != null) {
final String[] parts = lowMessage.split(" ");
if (commands.containsKey(parts[0]))
{ {
nameBuilder.append(" PEX"); commands.get(parts[0]).run(ircBot, player);
if (!pex.isEnabled()) return true;
{
nameBuilder.append('!');
}
nameBuilder.append(pex.getDescription().getVersion());
} }
return false;
final Plugin pb = server.getPluginManager().getPlugin("PermissionsBukkit");
if (pb != null)
{
nameBuilder.append(" PB");
if (!pb.isEnabled())
{
nameBuilder.append('!');
}
nameBuilder.append(pb.getDescription().getVersion());
}
final Plugin bp = server.getPluginManager().getPlugin("bPermissions");
if (bp != null)
{
nameBuilder.append(" BP");
if (!bp.isEnabled())
{
nameBuilder.append('!');
}
nameBuilder.append(bp.getDescription().getVersion());
}
final Plugin perm = server.getPluginManager().getPlugin("Permissions");
if (perm != null)
{
nameBuilder.append(" P");
if (!perm.isEnabled())
{
nameBuilder.append('!');
}
nameBuilder.append(perm.getDescription().getVersion());
}
return nameBuilder.toString();
} }
private void connectToIRC(final Player player) private void connectToIRC(final Player player)
{ {
ircBot = new IrcBot(player, "Ess_" + player.getName(), buildIrcName()); ircBot = new IrcBot(player, "Ess_" + player.getName(), UsernameUtil.createUsername(player));
}
private void sendErrors()
{
BufferedReader page = null;
try
{
File bukkitFolder = plugin.getDataFolder().getAbsoluteFile().getParentFile().getParentFile();
if (bukkitFolder == null || !bukkitFolder.exists())
{
chatUser.sendMessage("Bukkit folder not found.");
return;
}
File logFile = new File(bukkitFolder, "server.log");
if (!logFile.exists())
{
chatUser.sendMessage("Server log not found.");
return;
}
FileInputStream fis = new FileInputStream(logFile);
if (logFile.length() > 1000000)
{
fis.skip(logFile.length() - 1000000);
}
page = new BufferedReader(new InputStreamReader(fis));
final StringBuilder input = new StringBuilder();
String line;
Pattern pattern = Pattern.compile("^[0-9 :-]+\\[INFO\\].*");
while ((line = page.readLine()) != null)
{
if (!pattern.matcher(line).matches())
{
input.append(line).append("\n");
}
}
if (input.length() > 10000)
{
input.delete(0, input.length() - 10000);
}
final PastieUpload pastie = new PastieUpload();
final String url = pastie.send(input.toString());
String message = "Errors: " + url;
chatUser.sendMessage("§6" + ircBot.getNick() + ": §7" + message);
ircBot.sendMessage(message);
}
catch (IOException ex)
{
Bukkit.getLogger().log(Level.SEVERE, null, ex);
chatUser.sendMessage(ex.getMessage());
}
finally
{
try
{
if (page != null)
{
page.close();
}
}
catch (IOException ex)
{
Logger.getLogger(EssentialsHelp.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
private void sendStartup()
{
BufferedReader page = null;
try
{
File bukkitFolder = plugin.getDataFolder().getAbsoluteFile().getParentFile().getParentFile();
if (bukkitFolder == null || !bukkitFolder.exists())
{
chatUser.sendMessage("Bukkit folder not found.");
return;
}
File logFile = new File(bukkitFolder, "server.log");
if (!logFile.exists())
{
chatUser.sendMessage("Server log not found.");
return;
}
FileInputStream fis = new FileInputStream(logFile);
if (logFile.length() > 1000000)
{
fis.skip(logFile.length() - 1000000);
}
page = new BufferedReader(new InputStreamReader(fis));
final StringBuilder input = new StringBuilder();
String line;
Pattern patternStart = Pattern.compile("^[0-9 :-]+\\[INFO\\] Starting minecraft server version.*");
Pattern patternEnd = Pattern.compile("^[0-9 :-]+\\[INFO\\] Done \\([0-9.,]+s\\)! For help, type \"help\".*");
boolean log = false;
while ((line = page.readLine()) != null)
{
if (patternStart.matcher(line).matches())
{
if (input.length() > 0)
{
input.delete(0, input.length());
}
log = true;
}
if (log)
{
input.append(line).append("\n");
}
if (patternEnd.matcher(line).matches())
{
log = false;
}
}
if (input.length() > 10000)
{
input.delete(0, input.length() - 10000);
}
final PastieUpload pastie = new PastieUpload();
final String url = pastie.send(input.toString());
String message = "Startup: " + url;
chatUser.sendMessage("§6" + ircBot.getNick() + ": §7" + message);
ircBot.sendMessage(message);
}
catch (IOException ex)
{
Bukkit.getLogger().log(Level.SEVERE, null, ex);
chatUser.sendMessage(ex.getMessage());
}
finally
{
try
{
if (page != null)
{
page.close();
}
}
catch (IOException ex)
{
Logger.getLogger(EssentialsHelp.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
private void sendConfig()
{
BufferedReader page = null;
try
{
File configFolder = new File(plugin.getDataFolder().getParentFile(), "Essentials");
if (!configFolder.exists())
{
chatUser.sendMessage("Essentials plugin folder not found.");
return;
}
File configFile = new File(configFolder, "config.yml");
if (!configFile.exists())
{
chatUser.sendMessage("Essentials config file not found.");
return;
}
page = new BufferedReader(new InputStreamReader(new FileInputStream(configFile), UTF8));
final StringBuilder input = new StringBuilder();
String line;
while ((line = page.readLine()) != null)
{
input.append(line).append("\n");
}
final PastieUpload pastie = new PastieUpload();
final String url = pastie.send(input.toString());
String message = "Essentials config.yml: " + url;
chatUser.sendMessage("§6" + ircBot.getNick() + ": §7" + message);
ircBot.sendMessage(message);
}
catch (IOException ex)
{
Bukkit.getLogger().log(Level.SEVERE, null, ex);
chatUser.sendMessage(ex.getMessage());
}
finally
{
try
{
if (page != null)
{
page.close();
}
}
catch (IOException ex)
{
Logger.getLogger(EssentialsHelp.class.getName()).log(Level.SEVERE, null, ex);
}
}
} }
@Override @Override
public void onPlayerChat(PlayerChatEvent event) public void onPlayerChat(final PlayerChatEvent event)
{ {
if (event.getPlayer() == chatUser) if (event.getPlayer() == chatUser)
{ {
boolean success = sendChatMessage(event.getPlayer(), event.getMessage()); final boolean success = sendChatMessage(event.getPlayer(), event.getMessage());
event.setCancelled(success); event.setCancelled(success);
return; return;
} }
} }
@Override @Override
public void onPlayerQuit(PlayerQuitEvent event) public void onPlayerQuit(final PlayerQuitEvent event)
{ {
chatUser = null; closeConnection();
if (ircBot != null) {
ircBot.quit();
ircBot = null;
}
return;
} }
} }

View File

@@ -1,6 +1,7 @@
package com.earth2me.essentials.update; package com.earth2me.essentials.update;
import com.earth2me.essentials.update.UpdateCheck.CheckResult; import com.earth2me.essentials.update.UpdateCheck.CheckResult;
import java.util.logging.Level;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@@ -16,26 +17,20 @@ public class EssentialsUpdate extends JavaPlugin
public void onEnable() public void onEnable()
{ {
if (!getDataFolder().exists() && !getDataFolder().mkdirs() ) { if (!getDataFolder().exists() && !getDataFolder().mkdirs() ) {
Bukkit.getLogger().severe("Could not create data folder:"+getDataFolder().getPath()); Bukkit.getLogger().log(Level.SEVERE, "Could not create data folder: {0}", getDataFolder().getPath());
} }
essentialsHelp = new EssentialsHelp(this); essentialsHelp = new EssentialsHelp(this);
essentialsHelp.registerEvents(); essentialsHelp.registerEvents();
final UpdateCheck updateCheck = new UpdateCheck(this); final UpdateCheck updateCheck = new UpdateCheck(this);
updateCheck.checkForUpdates();
updateProcess = new UpdateProcess(this, updateCheck); updateProcess = new UpdateProcess(this, updateCheck);
updateProcess.registerEvents(); updateProcess.registerEvents();
Bukkit.getLogger().info("EssentialsUpdate " + getDescription().getVersion() + " loaded."); Bukkit.getLogger().log(Level.INFO, "EssentialsUpdate {0} loaded.", getDescription().getVersion());
if (updateCheck.isEssentialsInstalled()) if (updateCheck.isEssentialsInstalled())
{ {
updateCheck.checkForUpdates();
final Version myVersion = new Version(getDescription().getVersion());
if (updateCheck.getResult() == CheckResult.NEW_ESS && myVersion.equals(updateCheck.getNewVersion()))
{
Bukkit.getLogger().info("Versions of EssentialsUpdate and Essentials do not match. Starting automatic update.");
updateProcess.doAutomaticUpdate();
}
updateCheck.scheduleUpdateTask(); updateCheck.scheduleUpdateTask();
} }
else else

View File

@@ -12,7 +12,8 @@ import java.net.URL;
import java.net.URLConnection; import java.net.URLConnection;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.logging.Logger; import java.util.logging.Level;
import org.bukkit.Bukkit;
public class GetFile public class GetFile
@@ -22,7 +23,11 @@ public class GetFile
public GetFile(final String urlString) throws MalformedURLException, IOException public GetFile(final String urlString) throws MalformedURLException, IOException
{ {
final URL url = new URL(urlString); this(new URL(urlString));
}
public GetFile(final URL url) throws IOException
{
this.connection = url.openConnection(); this.connection = url.openConnection();
this.connection.setConnectTimeout(1000); this.connection.setConnectTimeout(1000);
this.connection.setReadTimeout(5000); this.connection.setReadTimeout(5000);
@@ -49,7 +54,7 @@ public class GetFile
} }
catch (NoSuchAlgorithmException ex) catch (NoSuchAlgorithmException ex)
{ {
// Ignore because the code is never called throw new RuntimeException(ex);
} }
} }
@@ -97,7 +102,7 @@ public class GetFile
} }
if (brokenFile && !file.delete()) if (brokenFile && !file.delete())
{ {
Logger.getLogger("Minecraft").severe("Could not delete file " + file.getPath()); Bukkit.getLogger().log(Level.SEVERE, "Could not delete file {0}", file.getPath());
} }
} }
finally finally

View File

@@ -3,7 +3,6 @@ package com.earth2me.essentials.update;
import java.io.File; import java.io.File;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -22,7 +21,7 @@ public class UpdateCheck
private final transient Plugin plugin; private final transient Plugin plugin;
private transient boolean essentialsInstalled; private transient boolean essentialsInstalled;
public UpdateCheck(Plugin plugin) public UpdateCheck(final Plugin plugin)
{ {
this.plugin = plugin; this.plugin = plugin;
updateFile = new UpdateFile(plugin); updateFile = new UpdateFile(plugin);
@@ -31,21 +30,20 @@ public class UpdateCheck
private void checkForEssentials() private void checkForEssentials()
{ {
PluginManager pm = plugin.getServer().getPluginManager(); final PluginManager pluginManager = plugin.getServer().getPluginManager();
Plugin essentials = pm.getPlugin("Essentials"); final Plugin essentials = pluginManager.getPlugin("Essentials");
if (essentials == null) essentialsInstalled = essentials != null;
if (essentialsInstalled)
{
currentVersion = new Version(essentials.getDescription().getVersion());
}
else
{ {
essentialsInstalled = false;
if (new File(plugin.getDataFolder().getParentFile(), "Essentials.jar").exists()) if (new File(plugin.getDataFolder().getParentFile(), "Essentials.jar").exists())
{ {
Bukkit.getLogger().severe("Essentials.jar found, but not recognized by Bukkit. Broken download?"); Bukkit.getLogger().severe("Essentials.jar found, but not recognized by Bukkit. Broken download?");
} }
} }
else
{
essentialsInstalled = true;
currentVersion = new Version(essentials.getDescription().getVersion());
}
} }
public void scheduleUpdateTask() public void scheduleUpdateTask()
@@ -71,16 +69,17 @@ public class UpdateCheck
return result; return result;
} }
int getNewBukkitVersion() public int getNewBukkitVersion()
{ {
return bukkitResult; return bukkitResult;
} }
VersionInfo getNewVersionInfo() public VersionInfo getNewVersionInfo()
{ {
return updateFile.getVersions().get(newVersion); return updateFile.getVersions().get(newVersion);
} }
public enum CheckResult public enum CheckResult
{ {
NEW_ESS, NEW_ESS_BUKKIT, NEW_BUKKIT, OK, UNKNOWN NEW_ESS, NEW_ESS_BUKKIT, NEW_BUKKIT, OK, UNKNOWN

View File

@@ -14,13 +14,14 @@ import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
public class UpdateFile public class UpdateFile
{ {
private final static Logger LOGGER = Logger.getLogger("Minecraft"); private final static Logger LOGGER = Bukkit.getLogger();
private final static String UPDATE_URL = "http://goo.gl/67jev"; private final static String UPDATE_URL = "http://goo.gl/67jev";
private final static BigInteger PUBLIC_KEY = new BigInteger("5ha6a2d4qdy17ttkg8evh74sl5a87djojwenu12k1lvy8ui6003e6l06rntczpoh99mhc3txj8mqlxw111oyy9yl7s7qpyluyzix3j1odxrxx4u52gxvyu6qiteapczkzvi7rxgeqsozz7b19rdx73a7quo9ybwpz1cr82r7x5k0pg2a73pjjsv2j1awr13azo7klrcxp9y5xxwf5qv1s3tw4zqftli18u0ek5qkbzfbgk1v5n2f11pkwwk6p0mibrn26wnjbv11vyiqgu95o7busmt6vf5q7grpcenl637w83mbin56s3asj1131b2mscj9xep3cbj7la9tgsxl5bj87vzy8sk2d34kzwqdqgh9nry43nqqus12l1stmiv184r8r3jcy8w43e8h1u1mzklldb5eytkuhayqik8l3ns04hwt8sgacvw534be8sx26qrn5s1", 36); private final static BigInteger PUBLIC_KEY = new BigInteger("5ha6a2d4qdy17ttkg8evh74sl5a87djojwenu12k1lvy8ui6003e6l06rntczpoh99mhc3txj8mqlxw111oyy9yl7s7qpyluyzix3j1odxrxx4u52gxvyu6qiteapczkzvi7rxgeqsozz7b19rdx73a7quo9ybwpz1cr82r7x5k0pg2a73pjjsv2j1awr13azo7klrcxp9y5xxwf5qv1s3tw4zqftli18u0ek5qkbzfbgk1v5n2f11pkwwk6p0mibrn26wnjbv11vyiqgu95o7busmt6vf5q7grpcenl637w83mbin56s3asj1131b2mscj9xep3cbj7la9tgsxl5bj87vzy8sk2d34kzwqdqgh9nry43nqqus12l1stmiv184r8r3jcy8w43e8h1u1mzklldb5eytkuhayqik8l3ns04hwt8sgacvw534be8sx26qrn5s1", 36);
private final transient File file; private final transient File file;

View File

@@ -1,9 +1,14 @@
package com.earth2me.essentials.update; package com.earth2me.essentials.update;
import java.util.List; import com.earth2me.essentials.update.states.InstallationFinishedEvent;
import com.earth2me.essentials.update.states.StateMachine;
import com.earth2me.essentials.update.tasks.SelfUpdate;
import java.util.logging.Level;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.CustomEventListener;
import org.bukkit.event.Event;
import org.bukkit.event.Event.Priority; import org.bukkit.event.Event.Priority;
import org.bukkit.event.Event.Type; import org.bukkit.event.Event.Type;
import org.bukkit.event.player.PlayerChatEvent; import org.bukkit.event.player.PlayerChatEvent;
@@ -18,35 +23,125 @@ public class UpdateProcess extends PlayerListener
private transient Player currentPlayer; private transient Player currentPlayer;
private final transient Plugin plugin; private final transient Plugin plugin;
private final transient UpdateCheck updateCheck; private final transient UpdateCheck updateCheck;
private transient StateMachine stateMachine;
public UpdateProcess(final Plugin plugin, final UpdateCheck updateCheck) public UpdateProcess(final Plugin plugin, final UpdateCheck updateCheck)
{ {
super();
this.plugin = plugin; this.plugin = plugin;
this.updateCheck = updateCheck; this.updateCheck = updateCheck;
} }
public void registerEvents() public void registerEvents()
{ {
final PluginManager pluginManager = plugin.getServer().getPluginManager(); final PluginManager pluginManager = plugin.getServer().getPluginManager();
pluginManager.registerEvent(Type.PLAYER_QUIT, this, Priority.Low, plugin); pluginManager.registerEvent(Type.PLAYER_QUIT, this, Priority.Low, plugin);
pluginManager.registerEvent(Type.PLAYER_CHAT, this, Priority.Lowest, plugin); pluginManager.registerEvent(Type.PLAYER_CHAT, this, Priority.Lowest, plugin);
pluginManager.registerEvent(Type.PLAYER_JOIN, this, Priority.Normal, plugin);
pluginManager.registerEvent(Type.CUSTOM_EVENT, new CustomEventListener()
{
@Override
public void onCustomEvent(final Event event)
{
if (event instanceof InstallationFinishedEvent)
{
UpdateProcess.this.currentPlayer = null;
}
}
}, Priority.Normal, plugin);
} }
public boolean selfUpdate()
{
if (new Version(plugin.getDescription().getVersion()).compareTo(updateCheck.getNewVersion()) < 0)
{
if (currentPlayer != null)
{
currentPlayer.sendMessage("A newer version of EssentialsUpdate is found. Downloading new file and reloading server.");
}
Bukkit.getLogger().log(Level.INFO, "A newer version of EssentialsUpdate is found. Downloading new file and reloading server.");
new SelfUpdate(new AbstractWorkListener(plugin, updateCheck.getNewVersionInfo())
{
@Override
public void onWorkAbort(final String message)
{
if (message != null && !message.isEmpty()
&& UpdateProcess.this.currentPlayer != null
&& UpdateProcess.this.currentPlayer.isOnline())
{
UpdateProcess.this.currentPlayer.sendMessage(message);
}
if (message != null && !message.isEmpty())
{
Bukkit.getLogger().log(Level.SEVERE, message);
}
UpdateProcess.this.currentPlayer = null;
}
@Override
public void onWorkDone(final String message)
{
if (message != null && !message.isEmpty()
&& UpdateProcess.this.currentPlayer != null
&& UpdateProcess.this.currentPlayer.isOnline())
{
UpdateProcess.this.currentPlayer.sendMessage(message);
}
if (message != null && !message.isEmpty())
{
Bukkit.getLogger().log(Level.INFO, message);
}
UpdateProcess.this.currentPlayer = null;
}
}).start();
return true;
}
if (updateCheck.getResult() == UpdateCheck.CheckResult.NEW_ESS_BUKKIT)
{
final String message = "Please update bukkit to version " + updateCheck.getNewBukkitVersion() + " before updating Essentials.";
if (currentPlayer != null)
{
currentPlayer.sendMessage(message);
}
Bukkit.getLogger().log(Level.INFO, message);
currentPlayer = null;
return true;
}
return false;
}
@Override @Override
public void onPlayerChat(final PlayerChatEvent event) public void onPlayerChat(final PlayerChatEvent event)
{ {
if (event.getPlayer() == currentPlayer) if (event.getPlayer() == currentPlayer)
{ {
reactOnMessage(event.getMessage()); final StateMachine.MachineResult result = stateMachine.reactOnMessage(event.getMessage());
if (result == StateMachine.MachineResult.ABORT)
{
currentPlayer.sendMessage("Installation wizard aborted. You can restart it using /essentialsupdate.");
currentPlayer = null;
}
if (result == StateMachine.MachineResult.DONE)
{
startWork();
}
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} }
@Override @Override
public void onPlayerJoin(final PlayerJoinEvent event) public void onPlayerJoin(final PlayerJoinEvent event)
{ {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
if (currentPlayer.getName().equals(player.getName()))
{
currentPlayer = player;
player.sendMessage("You quit the game, while the installation wizard was running.");
player.sendMessage("The installation wizard will now resume.");
player.sendMessage("You can exit the wizard by typing quit into the chat.");
stateMachine.resumeInstallation(player);
}
if (player.hasPermission("essentials.update") && !updateCheck.isEssentialsInstalled()) if (player.hasPermission("essentials.update") && !updateCheck.isEssentialsInstalled())
{ {
player.sendMessage("Hello " + player.getDisplayName()); player.sendMessage("Hello " + player.getDisplayName());
@@ -70,44 +165,23 @@ public class UpdateProcess extends PlayerListener
} }
} }
} }
void doAutomaticUpdate() public void onCommand(final CommandSender sender)
{ {
final UpdatesDownloader downloader = new UpdatesDownloader(); if (sender instanceof Player && sender.hasPermission("essentials.update"))
final VersionInfo info = updateCheck.getNewVersionInfo();
final List<String> changelog = info.getChangelog();
Bukkit.getLogger().info("Essentials changelog " + updateCheck.getNewVersion().toString());
for (String line : changelog)
{
Bukkit.getLogger().info(" - "+line);
}
downloader.start(plugin.getServer().getUpdateFolderFile(), info);
}
void doManualUpdate()
{
}
void onCommand(CommandSender sender)
{
if (sender instanceof Player && sender.hasPermission("essentials.install"))
{ {
if (currentPlayer == null) if (currentPlayer == null)
{ {
currentPlayer = (Player)sender; currentPlayer = (Player)sender;
if (updateCheck.isEssentialsInstalled()) if (selfUpdate())
{ {
doManualUpdate(); return;
} }
else stateMachine = new StateMachine(plugin, currentPlayer, updateCheck);
final StateMachine.MachineResult result = stateMachine.askQuestion();
if (result == StateMachine.MachineResult.DONE)
{ {
sender.sendMessage("Thank you for choosing Essentials."); startWork();
sender.sendMessage("The following installation wizard will guide you through the installation of Essentials.");
sender.sendMessage("Your answers will be saved for a later update.");
sender.sendMessage("Please answer the messages with yes or no, if not otherwise stated.");
sender.sendMessage("Write bye/exit/quit if you want to exit the wizard at anytime.");
} }
} }
if (!currentPlayer.equals(sender)) if (!currentPlayer.equals(sender))
@@ -120,9 +194,17 @@ public class UpdateProcess extends PlayerListener
sender.sendMessage("Please run the command as op from in game."); sender.sendMessage("Please run the command as op from in game.");
} }
} }
private void reactOnMessage(String message) private void startWork()
{ {
throw new UnsupportedOperationException("Not yet implemented"); currentPlayer.sendMessage("Installation wizard done. Starting installation.");
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable()
{
@Override
public void run()
{
stateMachine.startWork();
}
});
} }
} }

View File

@@ -1,19 +0,0 @@
package com.earth2me.essentials.update;
import java.io.File;
public class UpdatesDownloader
{
UpdatesDownloader()
{
}
void start(File updateFolderFile, VersionInfo newVersion)
{
}
}

View File

@@ -147,7 +147,7 @@ public class Version implements Comparable<Version>
hash = 71 * hash + this.major; hash = 71 * hash + this.major;
hash = 71 * hash + this.minor; hash = 71 * hash + this.minor;
hash = 71 * hash + this.build; hash = 71 * hash + this.build;
hash = 71 * hash + (this.type != null ? this.type.hashCode() : 0); hash = 71 * hash + (this.type == null ? 0 : this.type.hashCode());
return hash; return hash;
} }

View File

@@ -1,9 +1,10 @@
package com.earth2me.essentials.update; package com.earth2me.essentials.update;
import java.util.ArrayList;
import org.bukkit.configuration.Configuration; import org.bukkit.configuration.Configuration;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
public class VersionInfo public class VersionInfo
@@ -11,18 +12,18 @@ public class VersionInfo
private final transient List<String> changelog; private final transient List<String> changelog;
private final transient int minBukkit; private final transient int minBukkit;
private final transient int maxBukkit; private final transient int maxBukkit;
private final transient List<ModuleInfo> modules; private final transient Map<String, ModuleInfo> modules;
public VersionInfo(final Configuration updateConfig, final String path) public VersionInfo(final Configuration updateConfig, final String path)
{ {
changelog = updateConfig.getList(path + ".changelog", Collections.<String>emptyList()); changelog = updateConfig.getList(path + ".changelog", Collections.<String>emptyList());
minBukkit = updateConfig.getInt(path + ".min-bukkit", 0); minBukkit = updateConfig.getInt(path + ".min-bukkit", 0);
maxBukkit = updateConfig.getInt(path + ".max-bukkit", 0); maxBukkit = updateConfig.getInt(path + ".max-bukkit", 0);
modules = new ArrayList<ModuleInfo>(); modules = new HashMap<String, ModuleInfo>();
final String modulesPath = path + ".modules"; final String modulesPath = path + ".modules";
for (String module : updateConfig.getKeys(false)) for (String module : updateConfig.getKeys(false))
{ {
modules.add(new ModuleInfo(updateConfig, modulesPath + module)); modules.put(module, new ModuleInfo(updateConfig, modulesPath + module));
} }
} }
@@ -41,8 +42,8 @@ public class VersionInfo
return maxBukkit; return maxBukkit;
} }
public List<ModuleInfo> getModules() public Map<String, ModuleInfo> getModules()
{ {
return Collections.unmodifiableList(modules); return Collections.unmodifiableMap(modules);
} }
} }

View File

@@ -0,0 +1,77 @@
package com.earth2me.essentials.update.chat;
import com.earth2me.essentials.update.PastieUpload;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import org.bukkit.plugin.Plugin;
public abstract class AbstractFileCommand implements Command
{
private final transient Plugin plugin;
private final static Charset UTF8 = Charset.forName("utf-8");
public AbstractFileCommand(final Plugin plugin)
{
this.plugin = plugin;
}
protected BufferedReader getServerLogReader() throws IOException
{
final File bukkitFolder = plugin.getDataFolder().getAbsoluteFile().getParentFile().getParentFile();
if (bukkitFolder == null || !bukkitFolder.exists())
{
throw new IOException("Bukkit folder not found.");
}
final File logFile = new File(bukkitFolder, "server.log");
if (!logFile.exists())
{
throw new IOException("Server log not found.");
}
final FileInputStream fis = new FileInputStream(logFile);
try
{
if (logFile.length() > 1000000)
{
fis.skip(logFile.length() - 1000000);
}
return new BufferedReader(new InputStreamReader(fis));
}
catch (IOException ex)
{
fis.close();
throw ex;
}
}
protected BufferedReader getPluginConfig(final String pluginName, final String fileName) throws IOException
{
final File configFolder = new File(plugin.getDataFolder().getAbsoluteFile().getParentFile(), pluginName);
if (!configFolder.exists())
{
throw new IOException(pluginName + " plugin folder not found.");
}
final File configFile = new File(configFolder, fileName);
if (!configFile.exists())
{
throw new IOException(pluginName + " plugin file " + fileName + " not found.");
}
return new BufferedReader(new InputStreamReader(new FileInputStream(configFile), UTF8));
}
protected String uploadToPastie(final StringBuilder input) throws IOException
{
if (input.length() > 15000)
{
input.delete(0, input.length() - 15000);
input.append("## Cropped after 15000 bytes");
}
final PastieUpload pastie = new PastieUpload();
return pastie.send(input.toString());
}
}

View File

@@ -0,0 +1,9 @@
package com.earth2me.essentials.update.chat;
import org.bukkit.entity.Player;
public interface Command
{
void run(final IrcBot ircBot, final Player player);
}

View File

@@ -0,0 +1,62 @@
package com.earth2me.essentials.update.chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class ConfigCommand extends AbstractFileCommand implements Command
{
public ConfigCommand(final Plugin plugin)
{
super(plugin);
}
@Override
public void run(final IrcBot ircBot, final Player player)
{
BufferedReader page = null;
try
{
page = getPluginConfig("Essentials", "config.yml");
final StringBuilder input = new StringBuilder();
do
{
final String line = page.readLine();
if (line == null) {
break;
} else {
input.append(line).append("\n");
}
} while (true);
page.close();
final String message = "Essentials config.yml: " + uploadToPastie(input);
player.sendMessage("§6" + ircBot.getNick() + ": §7" + message);
ircBot.sendMessage(message);
}
catch (IOException ex)
{
Bukkit.getLogger().log(Level.SEVERE, null, ex);
player.sendMessage(ex.getMessage());
}
finally
{
try
{
if (page != null)
{
page.close();
}
}
catch (IOException ex)
{
Bukkit.getLogger().log(Level.SEVERE, null, ex);
player.sendMessage(ex.getMessage());
}
}
}
}

View File

@@ -0,0 +1,71 @@
package com.earth2me.essentials.update.chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.regex.Pattern;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class ErrorsCommand extends AbstractFileCommand implements Command
{
private final transient Pattern pattern = Pattern.compile("^[0-9 :-]+\\[INFO\\].*");
public ErrorsCommand(final Plugin plugin)
{
super(plugin);
}
@Override
public void run(final IrcBot ircBot, final Player player)
{
BufferedReader page = null;
try
{
page = getServerLogReader();
final StringBuilder input = new StringBuilder();
do
{
final String line = page.readLine();
if (line == null)
{
break;
}
else
{
if (!pattern.matcher(line).matches())
{
input.append(line).append("\n");
}
}
}
while (true);
page.close();
final String message = "Errors: " + uploadToPastie(input);
player.sendMessage("§6" + ircBot.getNick() + ": §7" + message);
ircBot.sendMessage(message);
}
catch (IOException ex)
{
Bukkit.getLogger().log(Level.SEVERE, null, ex);
player.sendMessage(ex.getMessage());
}
finally
{
try
{
if (page != null)
{
page.close();
}
}
catch (IOException ex)
{
Bukkit.getLogger().log(Level.SEVERE, null, ex);
player.sendMessage(ex.getMessage());
}
}
}
}

View File

@@ -0,0 +1,18 @@
package com.earth2me.essentials.update.chat;
import org.bukkit.entity.Player;
public class HelpCommand implements Command
{
@Override
public void run(final IrcBot ircBot, final Player player)
{
player.sendMessage("Commands: (Note: Files send to the chat will be public viewable.)");
player.sendMessage("!errors - Send the last server errors to the chat.");
player.sendMessage("!startup - Send the last startup messages to the chat.");
player.sendMessage("!config - Sends your Essentials config to the chat.");
player.sendMessage("!list - List all players in chat.");
player.sendMessage("!quit - Leave chat.");
}
}

View File

@@ -1,4 +1,4 @@
package com.earth2me.essentials.update; package com.earth2me.essentials.update.chat;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Level; import java.util.logging.Level;
@@ -95,7 +95,9 @@ public class IrcBot extends PircBot
} }
@Override @Override
protected void onKick(String channel, String kickerNick, String kickerLogin, String kickerHostname, String recipientNick, String reason) protected void onKick(final String channel, final String kickerNick,
final String kickerLogin, final String kickerHostname,
final String recipientNick, final String reason)
{ {
if (recipientNick.equals(getNick())) if (recipientNick.equals(getNick()))
{ {
@@ -111,25 +113,33 @@ public class IrcBot extends PircBot
} }
@Override @Override
protected void onMessage(String channel, String sender, String login, String hostname, String message) protected void onMessage(final String channel, final String sender,
final String login, final String hostname,
final String message)
{ {
player.sendMessage(formatChatMessage(sender, message, false)); player.sendMessage(formatChatMessage(sender, message, false));
} }
@Override @Override
protected void onAction(String sender, String login, String hostname, String target, String action) protected void onAction(final String sender, final String login,
final String hostname, final String target,
final String action)
{ {
player.sendMessage(formatChatMessage(sender, action, true)); player.sendMessage(formatChatMessage(sender, action, true));
} }
@Override @Override
protected void onNotice(String sourceNick, String sourceLogin, String sourceHostname, String target, String notice) protected void onNotice(final String sourceNick, final String sourceLogin,
final String sourceHostname, final String target,
final String notice)
{ {
player.sendMessage(formatChatMessage(sourceNick, notice, false)); player.sendMessage(formatChatMessage(sourceNick, notice, false));
} }
@Override @Override
protected void onTopic(String channel, String topic, String setBy, long date, boolean changed) protected void onTopic(final String channel, final String topic,
final String setBy, final long date,
final boolean changed)
{ {
player.sendMessage(formatChatMessage(channel, topic, false)); player.sendMessage(formatChatMessage(channel, topic, false));
} }

View File

@@ -0,0 +1,32 @@
package com.earth2me.essentials.update.chat;
import org.bukkit.entity.Player;
import org.jibble.pircbot.User;
public class ListCommand implements Command
{
@Override
public void run(final IrcBot ircBot, final Player player)
{
final User[] members = ircBot.getUsers();
final StringBuilder message = new StringBuilder();
for (User user : members)
{
if (message.length() > 0)
{
message.append("§f, ");
}
if (user.isOp() || user.hasVoice())
{
message.append("§6");
}
else
{
message.append("§7");
}
message.append(user.getPrefix()).append(user.getNick());
}
player.sendMessage(message.toString());
}
}

View File

@@ -0,0 +1,77 @@
package com.earth2me.essentials.update.chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.regex.Pattern;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class StartupCommand extends AbstractFileCommand implements Command
{
private final transient Pattern patternStart = Pattern.compile("^[0-9 :-]+\\[INFO\\] Starting minecraft server version.*");
private final transient Pattern patternEnd = Pattern.compile("^[0-9 :-]+\\[INFO\\] Done \\([0-9.,]+s\\)! For help, type \"help\".*");
public StartupCommand(final Plugin plugin)
{
super(plugin);
}
@Override
public void run(final IrcBot ircBot, final Player player)
{
BufferedReader page = null;
try
{
page = getServerLogReader();
final StringBuilder input = new StringBuilder();
String line;
boolean log = false;
while ((line = page.readLine()) != null)
{
if (patternStart.matcher(line).matches())
{
if (input.length() > 0)
{
input.delete(0, input.length());
}
log = true;
}
if (log)
{
input.append(line).append("\n");
}
if (patternEnd.matcher(line).matches())
{
log = false;
}
}
page.close();
final String message = "Startup: " + uploadToPastie(input);
player.sendMessage("§6" + ircBot.getNick() + ": §7" + message);
ircBot.sendMessage(message);
}
catch (IOException ex)
{
Bukkit.getLogger().log(Level.SEVERE, null, ex);
player.sendMessage(ex.getMessage());
}
finally
{
try
{
if (page != null)
{
page.close();
}
}
catch (IOException ex)
{
Bukkit.getLogger().log(Level.SEVERE, null, ex);
player.sendMessage(ex.getMessage());
}
}
}
}

View File

@@ -0,0 +1,124 @@
package com.earth2me.essentials.update.chat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public final class UsernameUtil
{
private static final Pattern CB_PATTERN = Pattern.compile("git-Bukkit-([0-9]+).([0-9]+).([0-9]+)-[0-9]+-[0-9a-z]+-b([0-9]+)jnks.*");
private UsernameUtil()
{
}
public static String createUsername(final Player player)
{
final StringBuilder nameBuilder = new StringBuilder();
final Server server = Bukkit.getServer();
nameBuilder.append(player.getName());
addCraftBukkitVersion(server, nameBuilder);
addEssentialsVersion(server, nameBuilder);
addGroupManagerVersion(server, nameBuilder);
addPermissionsExVersion(server, nameBuilder);
addPermissionsBukkitVersion(server, nameBuilder);
addBPermissionsVersion(server, nameBuilder);
addPermissionsVersion(server, nameBuilder);
return nameBuilder.toString();
}
private static void addPermissionsVersion(final Server server, final StringBuilder nameBuilder)
{
final Plugin perm = server.getPluginManager().getPlugin("Permissions");
if (perm != null)
{
nameBuilder.append(" P");
if (!perm.isEnabled())
{
nameBuilder.append('!');
}
nameBuilder.append(perm.getDescription().getVersion());
}
}
private static void addBPermissionsVersion(final Server server, final StringBuilder nameBuilder)
{
final Plugin bperm = server.getPluginManager().getPlugin("bPermissions");
if (bperm != null)
{
nameBuilder.append(" BP");
if (!bperm.isEnabled())
{
nameBuilder.append('!');
}
nameBuilder.append(bperm.getDescription().getVersion());
}
}
private static void addPermissionsBukkitVersion(final Server server, final StringBuilder nameBuilder)
{
final Plugin permb = server.getPluginManager().getPlugin("PermissionsBukkit");
if (permb != null)
{
nameBuilder.append(" PB");
if (!permb.isEnabled())
{
nameBuilder.append('!');
}
nameBuilder.append(permb.getDescription().getVersion());
}
}
private static void addPermissionsExVersion(final Server server, final StringBuilder nameBuilder)
{
final Plugin pex = server.getPluginManager().getPlugin("PermissionsEx");
if (pex != null)
{
nameBuilder.append(" PEX");
if (!pex.isEnabled())
{
nameBuilder.append('!');
}
nameBuilder.append(pex.getDescription().getVersion());
}
}
private static void addGroupManagerVersion(final Server server, final StringBuilder nameBuilder)
{
final Plugin groupManager = server.getPluginManager().getPlugin("GroupManager");
if (groupManager != null)
{
nameBuilder.append(" GM");
if (!groupManager.isEnabled())
{
nameBuilder.append('!');
}
}
}
private static void addEssentialsVersion(final Server server, final StringBuilder nameBuilder)
{
final Plugin essentials = server.getPluginManager().getPlugin("Essentials");
if (essentials != null)
{
nameBuilder.append(" ESS");
nameBuilder.append(essentials.getDescription().getVersion());
}
}
private static void addCraftBukkitVersion(final Server server, final StringBuilder nameBuilder)
{
final Matcher versionMatch = CB_PATTERN.matcher(server.getVersion());
if (versionMatch.matches())
{
nameBuilder.append(" CB");
nameBuilder.append(versionMatch.group(4));
}
}
}

View File

@@ -0,0 +1,113 @@
package com.earth2me.essentials.update.states;
import com.earth2me.essentials.update.AbstractWorkListener;
import org.bukkit.entity.Player;
public abstract class AbstractState
{
private transient boolean abortion = false;
private final transient StateMap stateMap;
public AbstractState(final StateMap stateMap)
{
this.stateMap = stateMap;
}
public <T extends AbstractState> T getState(final Class<? extends T> stateClass)
{
if (!stateMap.containsKey(stateClass))
{
try
{
final AbstractState state = stateClass.getConstructor(StateMap.class).newInstance(stateMap);
stateMap.put(stateClass, state);
}
catch (Exception ex)
{
/*
* This should never happen.
* All states that are added to the map automatically,
* have to have a Constructor that accepts the StateMap.
*/
throw new RuntimeException(ex);
}
}
return (T)stateMap.get(stateClass);
}
public abstract AbstractState getNextState();
/**
* Check if we already know the answer, so the user does not have to answer the question.
*
* @return true, if the answer could be guessed.
*/
public boolean guessAnswer()
{
return false;
}
/**
* Ask the user the question.
* @param sender
*/
public abstract void askQuestion(Player sender);
/**
* React on the answer and set internal variables
* @param answer
* @return true, if the answer could be recognized as a valid answer
*/
public abstract boolean reactOnAnswer(String answer);
public final AbstractState reactOnAnswer(final Player sender, final String answer)
{
final String trimmedAnswer = answer.trim();
if (trimmedAnswer.equalsIgnoreCase("quit")
|| trimmedAnswer.equalsIgnoreCase("bye")
|| trimmedAnswer.equalsIgnoreCase("abort")
|| trimmedAnswer.equalsIgnoreCase("cancel")
|| trimmedAnswer.equalsIgnoreCase("exit"))
{
abort();
return null;
}
try
{
final boolean found = reactOnAnswer(trimmedAnswer);
if (found)
{
return getNextState();
}
else
{
sender.sendMessage("Answer not recognized.");
return this;
}
}
catch (RuntimeException ex)
{
sender.sendMessage(ex.toString());
return this;
}
}
/**
* Do something based on the answer, that the user gave.
*/
public void doWork(final AbstractWorkListener listener)
{
listener.onWorkDone();
}
public boolean isAbortion()
{
return abortion;
}
protected void abort()
{
abortion = true;
}
}

View File

@@ -0,0 +1,57 @@
package com.earth2me.essentials.update.states;
public abstract class AbstractYesNoState extends AbstractState
{
private boolean answer = false;
private final transient Class<? extends AbstractState> yesState;
private final transient Class<? extends AbstractState> noState;
public AbstractYesNoState(final StateMap states, final Class<? extends AbstractState> nextState)
{
this(states, nextState, nextState);
}
public AbstractYesNoState(final StateMap states, final Class<? extends AbstractState> yesState, final Class<? extends AbstractState> noState)
{
super(states);
this.yesState = yesState;
this.noState = noState;
}
@Override
public AbstractState getNextState()
{
return answer
? (yesState == null ? null : getState(yesState))
: (noState == null ? null : getState(noState));
}
@Override
public boolean reactOnAnswer(final String answer)
{
if (answer.equalsIgnoreCase("yes")
|| answer.equalsIgnoreCase("y"))
{
this.answer = true;
return true;
}
if (answer.equalsIgnoreCase("no")
|| answer.equalsIgnoreCase("n"))
{
this.answer = false;
return true;
}
return false;
}
public boolean getAnswer()
{
return answer;
}
protected void setAnswer(final boolean answer)
{
this.answer = answer;
}
}

View File

@@ -0,0 +1,20 @@
package com.earth2me.essentials.update.states;
import org.bukkit.entity.Player;
public class AdvancedMode extends AbstractYesNoState
{
public AdvancedMode(final StateMap states)
{
super(states, EssentialsChat.class);
}
@Override
public void askQuestion(final Player sender)
{
sender.sendMessage("This installation mode has a lot of options.");
sender.sendMessage("Do you want use the advanced mode to see all questions?");
sender.sendMessage("Otherwise the default values will be used.");
}
}

View File

@@ -0,0 +1,91 @@
package com.earth2me.essentials.update.states;
import com.earth2me.essentials.update.UpdateCheck;
import com.earth2me.essentials.update.VersionInfo;
import java.util.List;
import org.bukkit.entity.Player;
public class Changelog extends AbstractState
{
private static final int CHANGES_PER_PAGE = 5;
private transient int page = 0;
private transient boolean confirmed = false;
private transient final List<String> changes;
private transient final int pages;
public Changelog(final StateMap stateMap)
{
super(stateMap);
changes = getChanges();
pages = changes.size() / CHANGES_PER_PAGE + (changes.size() % CHANGES_PER_PAGE > 0 ? 1 : 0);
}
@Override
public AbstractState getNextState()
{
return confirmed ? getState(EssentialsChat.class) : this;
}
@Override
public boolean guessAnswer()
{
if (pages == 0)
{
confirmed = true;
}
return confirmed;
}
private List<String> getChanges()
{
final UpdateCheck updateCheck = getState(UpdateOrInstallation.class).getUpdateCheck();
final VersionInfo versionInfo = updateCheck.getNewVersionInfo();
return versionInfo.getChangelog();
}
@Override
public void askQuestion(final Player sender)
{
if (pages > 1)
{
sender.sendMessage("Changelog, page " + page + " of " + pages + ":");
}
else
{
sender.sendMessage("Changelog:");
}
for (int i = page * CHANGES_PER_PAGE; i < Math.min(page * CHANGES_PER_PAGE + CHANGES_PER_PAGE, changes.size()); i++)
{
sender.sendMessage(changes.get(i));
}
if (pages > 1)
{
sender.sendMessage("Select a page by typing the numbers 1 to " + pages + " to view all changes and then type confirm or abort.");
}
else
{
sender.sendMessage("Type confirm to update Essentials or abort to cancel the update.");
}
}
@Override
public boolean reactOnAnswer(final String answer)
{
if (answer.equalsIgnoreCase("confirm"))
{
confirmed = true;
return true;
}
if (answer.matches("[0-9]+"))
{
final int page = Integer.parseInt(answer);
if (page <= pages && page > 0)
{
this.page = page - 1;
return true;
}
}
return false;
}
}

Some files were not shown because too many files have changed in this diff Show More