mirror of
https://github.com/TotalFreedomMC/TF-EssentialsX.git
synced 2025-05-06 15:50:43 +00:00
Merge branch 'master' of github.com:essentials/Essentials into ess
This commit is contained in:
commit
dd87dcdd3d
72 changed files with 1392 additions and 878 deletions
|
@ -601,6 +601,13 @@ is divided into following sections:
|
|||
<propertyfile file="${built-jar.properties}">
|
||||
<entry key="${basedir}" value=""/>
|
||||
</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 depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
|
||||
<target depends="init" name="-check-automatic-build">
|
||||
|
@ -1038,6 +1045,13 @@ is divided into following sections:
|
|||
<propertyfile file="${built-clean.properties}">
|
||||
<entry key="${basedir}" value=""/>
|
||||
</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 depends="init" name="-do-clean">
|
||||
<delete dir="${build.dir}"/>
|
||||
|
|
|
@ -3,8 +3,8 @@ build.xml.script.CRC32=3233ee78
|
|||
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.
|
||||
# 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.script.CRC32=dbc81ee1
|
||||
nbproject/build-impl.xml.data.CRC32=a830bc14
|
||||
nbproject/build-impl.xml.script.CRC32=64a00ba6
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45
|
||||
nbproject/profiler-build-impl.xml.data.CRC32=ab78ce15
|
||||
nbproject/profiler-build-impl.xml.script.CRC32=abda56ed
|
||||
|
|
|
@ -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.iCo5.jar=../lib/iCo5.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.MultiCurrency.jar=../lib/MultiCurrency.jar
|
||||
file.reference.Permissions3.jar=../lib/Permissions3.jar
|
||||
|
@ -80,7 +80,6 @@ jar.compress=true
|
|||
jar.index=${jnlp.enabled}
|
||||
javac.classpath=\
|
||||
${file.reference.Permissions3.jar}:\
|
||||
${file.reference.craftbukkit-0.0.1-SNAPSHOT.jar}:\
|
||||
${file.reference.iCo4.jar}:\
|
||||
${file.reference.iCo5.jar}:\
|
||||
${file.reference.iCo6.jar}:\
|
||||
|
@ -89,7 +88,9 @@ javac.classpath=\
|
|||
${file.reference.PermissionsEx.jar}:\
|
||||
${file.reference.bPermissions.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
|
||||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
|
@ -110,6 +111,7 @@ javadoc.noindex=false
|
|||
javadoc.nonavbar=false
|
||||
javadoc.notree=false
|
||||
javadoc.private=false
|
||||
javadoc.reference.PermissionsEx.jar=../lib/PermissionsEx-javadoc.jar
|
||||
javadoc.splitindex=true
|
||||
javadoc.use=true
|
||||
javadoc.version=false
|
||||
|
@ -126,6 +128,8 @@ jnlp.signing.keystore=
|
|||
meta.inf.dir=${src.dir}/META-INF
|
||||
mkdist.disabled=true
|
||||
platform.active=default_platform
|
||||
project.EssentialsGroupManager=../EssentialsGroupManager
|
||||
reference.EssentialsGroupManager.jar=../EssentialsGroupManager/dist/EssentialsGroupManager.jar
|
||||
run.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
||||
|
|
|
@ -14,6 +14,15 @@
|
|||
<libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
|
||||
<definitions>../lib/nblibraries.properties</definitions>
|
||||
</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>
|
||||
</project>
|
||||
|
|
|
@ -33,7 +33,6 @@ import com.earth2me.essentials.register.payment.Methods;
|
|||
import com.earth2me.essentials.signs.SignBlockListener;
|
||||
import com.earth2me.essentials.signs.SignEntityListener;
|
||||
import com.earth2me.essentials.signs.SignPlayerListener;
|
||||
import java.math.BigInteger;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
|
@ -58,12 +57,10 @@ public class Essentials extends JavaPlugin implements IEssentials
|
|||
private transient List<IConf> confList;
|
||||
private transient Backup backup;
|
||||
private transient ItemDb itemDb;
|
||||
private transient EssentialsUpdateTimer updateTimer;
|
||||
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 UserMap userMap;
|
||||
private transient ExecuteTimer execTimer;
|
||||
|
||||
@Override
|
||||
public ISettings getSettings()
|
||||
|
@ -94,32 +91,36 @@ public class Essentials extends JavaPlugin implements IEssentials
|
|||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
execTimer = new ExecuteTimer();
|
||||
execTimer.start();
|
||||
final String[] javaversion = System.getProperty("java.version").split("\\.", 3);
|
||||
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"));
|
||||
}
|
||||
if (enableErrorLogging)
|
||||
{
|
||||
LOGGER.addHandler(errorHandler);
|
||||
}
|
||||
final EssentialsUpgrade upgrade = new EssentialsUpgrade(this);
|
||||
upgrade.beforeSettings();
|
||||
execTimer.mark("Upgrade");
|
||||
confList = new ArrayList<IConf>();
|
||||
settings = new Settings(this);
|
||||
confList.add(settings);
|
||||
execTimer.mark("Settings");
|
||||
upgrade.afterSettings();
|
||||
execTimer.mark("Upgrade2");
|
||||
Util.updateLocale(settings.getLocale(), this);
|
||||
userMap = new UserMap(this);
|
||||
confList.add(userMap);
|
||||
execTimer.mark("Init(Usermap)");
|
||||
spawn = new Spawn(getServer(), this.getDataFolder());
|
||||
confList.add(spawn);
|
||||
warps = new Warps(getServer(), this.getDataFolder());
|
||||
confList.add(warps);
|
||||
execTimer.mark("Init(Spawn/Warp)");
|
||||
worth = new Worth(this.getDataFolder());
|
||||
confList.add(worth);
|
||||
itemDb = new ItemDb(this);
|
||||
confList.add(itemDb);
|
||||
execTimer.mark("Init(Worth/ItemDB)");
|
||||
reload();
|
||||
backup = new Backup(this);
|
||||
|
||||
|
@ -191,6 +192,7 @@ public class Essentials extends JavaPlugin implements IEssentials
|
|||
pm.registerEvent(Type.ENTITY_REGAIN_HEALTH, 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);
|
||||
final JailPlayerListener jailPlayerListener = new JailPlayerListener(this);
|
||||
confList.add(jail);
|
||||
|
@ -207,19 +209,19 @@ public class Essentials extends JavaPlugin implements IEssentials
|
|||
final EssentialsTimer timer = new EssentialsTimer(this);
|
||||
getScheduler().scheduleSyncRepeatingTask(this, timer, 1, 100);
|
||||
Economy.setEss(this);
|
||||
if (getSettings().isUpdateEnabled())
|
||||
{
|
||||
updateTimer = new EssentialsUpdateTimer(this);
|
||||
getScheduler().scheduleAsyncRepeatingTask(this, updateTimer, 20 * 60 * 10, 20 * 3600 * 6);
|
||||
}
|
||||
execTimer.mark("RegListeners");
|
||||
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
|
||||
public void onDisable()
|
||||
{
|
||||
Trade.closeLog();
|
||||
LOGGER.removeHandler(errorHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -230,6 +232,7 @@ public class Essentials extends JavaPlugin implements IEssentials
|
|||
for (IConf iConf : confList)
|
||||
{
|
||||
iConf.reloadConfig();
|
||||
execTimer.mark("Reload(" + iConf.getClass().getSimpleName() + ")");
|
||||
}
|
||||
|
||||
Util.updateLocale(settings.getLocale(), this);
|
||||
|
@ -479,14 +482,6 @@ public class Essentials extends JavaPlugin implements IEssentials
|
|||
{
|
||||
LOGGER.log(logRecord);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (enableErrorLogging)
|
||||
{
|
||||
errorHandler.publish(logRecord);
|
||||
errorHandler.flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -609,10 +604,12 @@ public class Essentials extends JavaPlugin implements IEssentials
|
|||
@Override
|
||||
public int broadcastMessage(final IUser sender, final String message)
|
||||
{
|
||||
if (sender == null) {
|
||||
if (sender == null)
|
||||
{
|
||||
return getServer().broadcastMessage(message);
|
||||
}
|
||||
if (sender.isHidden()) {
|
||||
if (sender.isHidden())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
final Player[] players = getServer().getOnlinePlayers();
|
||||
|
@ -629,11 +626,6 @@ public class Essentials extends JavaPlugin implements IEssentials
|
|||
return players.length;
|
||||
}
|
||||
|
||||
public Map<BigInteger, String> getErrors()
|
||||
{
|
||||
return errorHandler.getErrors();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int scheduleAsyncDelayedTask(final Runnable run)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
84
Essentials/src/com/earth2me/essentials/ExecuteTimer.java
Normal file
84
Essentials/src/com/earth2me/essentials/ExecuteTimer.java
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -124,8 +124,10 @@ public interface ISettings extends IConf
|
|||
boolean useBukkitPermissions();
|
||||
|
||||
boolean addPrefixSuffix();
|
||||
|
||||
boolean isUpdateEnabled();
|
||||
|
||||
boolean disablePrefix();
|
||||
|
||||
boolean disableSuffix();
|
||||
|
||||
long getAutoAfk();
|
||||
|
||||
|
|
|
@ -498,11 +498,15 @@ public class Settings implements ISettings
|
|||
{
|
||||
return config.getBoolean("add-prefix-suffix", ess.getServer().getPluginManager().isPluginEnabled("EssentialsChat"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUpdateEnabled()
|
||||
|
||||
public boolean disablePrefix()
|
||||
{
|
||||
return config.getBoolean("update-check", false);
|
||||
return config.getBoolean("disablePrefix", false);
|
||||
}
|
||||
|
||||
public boolean disableSuffix()
|
||||
{
|
||||
return config.getBoolean("disableSuffix", false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -12,7 +12,6 @@ import org.bukkit.entity.Player;
|
|||
|
||||
public class User extends UserData implements Comparable<User>, IReplyTo, IUser
|
||||
{
|
||||
private boolean justPortaled = false;
|
||||
private CommandSender replyTo = null;
|
||||
private transient User teleportRequester;
|
||||
private transient boolean teleportRequestHere;
|
||||
|
@ -156,16 +155,6 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
|
|||
this.base = new OfflinePlayer(getName(), ess);
|
||||
}
|
||||
|
||||
public boolean getJustPortaled()
|
||||
{
|
||||
return justPortaled;
|
||||
}
|
||||
|
||||
public void setJustPortaled(final boolean value)
|
||||
{
|
||||
justPortaled = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setReplyTo(final CommandSender user)
|
||||
{
|
||||
|
@ -269,12 +258,22 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
|
|||
|
||||
if (ess.getSettings().addPrefixSuffix())
|
||||
{
|
||||
final String prefix = ess.getPermissionsHandler().getPrefix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName());
|
||||
final String suffix = ess.getPermissionsHandler().getSuffix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName());
|
||||
|
||||
nickname.insert(0, prefix);
|
||||
nickname.append(suffix);
|
||||
if (suffix.length() < 2 || !suffix.substring(suffix.length() - 2, suffix.length() - 1).equals("§"))
|
||||
if (!ess.getSettings().disablePrefix())
|
||||
{
|
||||
final String prefix = ess.getPermissionsHandler().getPrefix(base).replace('&', '§').replace("{WORLDNAME}", this.getWorld().getName());
|
||||
nickname.insert(0, prefix);
|
||||
}
|
||||
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");
|
||||
}
|
||||
|
|
|
@ -24,15 +24,13 @@ public class Commandme extends EssentialsCommand
|
|||
{
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
final StringBuilder message = new StringBuilder();
|
||||
message.append("* ");
|
||||
message.append(user.getDisplayName());
|
||||
message.append(' ');
|
||||
for (int i = 0; i < args.length; i++)
|
||||
|
||||
String message = getFinalArg(args, 0);
|
||||
if (user.isAuthorized("essentials.chat.color"))
|
||||
{
|
||||
message.append(args[i]);
|
||||
message.append(' ');
|
||||
message = message.replaceAll("&([0-9a-f])", "§$1");
|
||||
}
|
||||
ess.broadcastMessage(user, message.toString());
|
||||
|
||||
ess.broadcastMessage(user, Util.format("action", user.getDisplayName(), message));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -77,7 +77,7 @@ public class PermissionsExHandler implements IPermissionsHandler
|
|||
{
|
||||
return null;
|
||||
}
|
||||
return user.getPrefix();
|
||||
return user.getPrefix(base.getWorld().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -88,6 +88,7 @@ public class PermissionsExHandler implements IPermissionsHandler
|
|||
{
|
||||
return null;
|
||||
}
|
||||
return user.getSuffix();
|
||||
|
||||
return user.getSuffix(base.getWorld().getName());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -111,17 +111,6 @@ public class PermissionsHandler implements IPermissionsHandler
|
|||
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");
|
||||
if (bPermPlugin != null && bPermPlugin.isEnabled())
|
||||
{
|
||||
|
@ -132,6 +121,28 @@ public class PermissionsHandler implements IPermissionsHandler
|
|||
}
|
||||
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");
|
||||
if (permPlugin != null && permPlugin.isEnabled())
|
||||
|
|
|
@ -144,7 +144,6 @@ player-commands:
|
|||
- nick
|
||||
- pay
|
||||
- ping
|
||||
- portal
|
||||
- powertool
|
||||
- protect
|
||||
- r
|
||||
|
|
|
@ -31,7 +31,6 @@ groups:
|
|||
- essentials.nick
|
||||
- essentials.pay
|
||||
- essentials.ping
|
||||
- essentials.portal
|
||||
- essentials.powertool
|
||||
- essentials.protect
|
||||
- essentials.sethome
|
||||
|
|
|
@ -38,8 +38,7 @@ groups:
|
|||
essentials.msg: true
|
||||
essentials.nick: true
|
||||
essentials.pay: true
|
||||
essentials.ping: true
|
||||
essentials.portal: true
|
||||
essentials.ping: true
|
||||
essentials.powertool: true
|
||||
essentials.protect: true
|
||||
essentials.sethome: true
|
||||
|
|
|
@ -37,7 +37,6 @@ groups:
|
|||
- essentials.nick
|
||||
- essentials.pay
|
||||
- essentials.ping
|
||||
- essentials.portal
|
||||
- essentials.powertool
|
||||
- essentials.protect
|
||||
- essentials.sethome
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# Single quotes have to be doubled: ''
|
||||
# Translations start here
|
||||
# by:
|
||||
action = * {0} {1}
|
||||
addedToAccount = \u00a7a{0} has been added to your account.
|
||||
addedToOthersAccount = \u00a7a{0} has been added to {1} account.
|
||||
alertBroke = broke:
|
||||
|
@ -44,7 +45,6 @@ corruptNodeInConfig = \u00a74Notice: Your configuration file has a corrupt {0} n
|
|||
couldNotFindTemplate = Could not find template {0}
|
||||
creatingConfigFromTemplate = Creating config from template: {0}
|
||||
creatingEmptyConfig = Creating empty config: {0}
|
||||
creatingPortal = Creating portal at {0},{1},{2}.
|
||||
day = day
|
||||
days = days
|
||||
defaultBanReason = The Ban Hammer has spoken!
|
||||
|
@ -83,7 +83,6 @@ gcentities = entities
|
|||
gcfree = Free memory: {0} MB
|
||||
gcmax = Maximum memory: {0} MB
|
||||
gctotal = Allocated memory: {0} MB
|
||||
generatingPortal = \u00a77Generating an exit portal.
|
||||
geoIpUrlEmpty = GeoIP download url is empty.
|
||||
geoIpUrlInvalid = GeoIP download url is invalid.
|
||||
geoipJoinFormat = Player {0} comes from {1}
|
||||
|
@ -331,7 +330,6 @@ unlimitedItemPermission = \u00a7cNo permission for unlimited item {0}.
|
|||
unlimitedItems = Unlimited items:
|
||||
unmutedPlayer = Player {0} unmuted.
|
||||
upgradingFilesError = Error while upgrading the files
|
||||
userCreatedPortal = {0} used a portal and generated an exit portal.
|
||||
userDoesNotExist = The user {0} does not exist.
|
||||
userIsAway = {0} is now AFK
|
||||
userIsNotAway = {0} is no longer AFK
|
||||
|
@ -339,7 +337,6 @@ userJailed = \u00a77You have been jailed
|
|||
userUsedPortal = {0} used an existing exit portal.
|
||||
userdataMoveBackError = Failed to move userdata/{0}.tmp to userdata/{1}
|
||||
userdataMoveError = Failed to move userdata/{0} to userdata/{1}.tmp
|
||||
usingPortal = \u00a77Teleporting via portal to an existing portal.
|
||||
usingTempFolderForTesting = Using temp folder for testing:
|
||||
versionMismatch = Version mismatch! Please update {0} to the same version.
|
||||
versionMismatchAll = Version mismatch! Please update all Essentials jars to the same version.
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# Single quotes have to be doubled: ''
|
||||
# Translations start here
|
||||
# by: papand13, papand13@gmail.com
|
||||
action = * {0} {1}
|
||||
addedToAccount = \u00a7a{0} er tilf\u00f8jet til din konto.
|
||||
addedToOthersAccount = \u00a7a{0} er blevet tilf\u00f8jet til {1} konto.
|
||||
alertBroke = \u00f8delagde:
|
||||
|
@ -44,7 +45,6 @@ corruptNodeInConfig = \u00a74Notice: Din konfigurations fil har en korrupt {0} n
|
|||
couldNotFindTemplate = Kunne ikke finde skabelon {0}
|
||||
creatingConfigFromTemplate = Opretter config fra skabelon: {0}
|
||||
creatingEmptyConfig = Opretter tom config: {0}
|
||||
creatingPortal = Opretter portal ved {0},{1},{2}.
|
||||
day = dag
|
||||
days = dage
|
||||
defaultBanReason = Ban hammeren har talt!
|
||||
|
@ -83,7 +83,6 @@ gcentities = enheder
|
|||
gcfree = Free memory: {0} MB
|
||||
gcmax = Maximum memory: {0} MB
|
||||
gctotal = Allocated memory: {0} MB
|
||||
generatingPortal = \u00a77Genererer en udgangs portal.
|
||||
geoIpUrlEmpty = GeoIP download url er tom.
|
||||
geoIpUrlInvalid = GeoIP download url er ugyldig.
|
||||
geoipJoinFormat = Spiller {0} kommer fra {1}
|
||||
|
@ -330,7 +329,6 @@ unlimitedItemPermission = \u00a7cIngen tilladelse til ubegr\u00e6nset element {0
|
|||
unlimitedItems = Uendelige elementer:
|
||||
unmutedPlayer = Spiller {0} ikke-d\u00e6mpet.
|
||||
upgradingFilesError = Fejl under opgradering af filer
|
||||
userCreatedPortal = {0} bruge en portal og genererede en udgangs portal.
|
||||
userDoesNotExist = Brugeren {0} eksisterer ikke.
|
||||
userIsAway = {0} er nu AFK
|
||||
userIsNotAway = {0} er ikke l\u00e6ngere AFK
|
||||
|
@ -338,7 +336,6 @@ userJailed = \u00a77Du er blevet f\u00e6ngslet
|
|||
userUsedPortal = {0} brugte en eksisterende udgangs portal.
|
||||
userdataMoveBackError = Kunne ikke flytte userdata/{0}.tmp til userdata/{1}
|
||||
userdataMoveError = Kunne ikke flytte userdata/{0} til userdata/{1}.tmp
|
||||
usingPortal = \u00a77Teleporterede via portal til en eksisterende portal.
|
||||
usingTempFolderForTesting = Bruger temp mappe for testing:
|
||||
versionMismatch = Version matcher ikke! Venligst opdater {0} til den nyeste version.
|
||||
versionMismatchAll = Version matcher ikke! Venligst opdater alle Essentials jar''er til samme version.
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# Single quotes have to be doubled: ''
|
||||
# Translations start here
|
||||
# by:
|
||||
action = * {0} {1}
|
||||
addedToAccount = \u00a7a{0} wurden zu deiner Geldb\u00f6rse hinzugef\u00fcgt.
|
||||
addedToOthersAccount = \u00a7a{0} wurden zu {1}s Konto hinzugef\u00fcgt.
|
||||
alertBroke = zerst\u00f6rt:
|
||||
|
@ -44,7 +45,6 @@ corruptNodeInConfig = \u00a74Hinweis: Deine Konfigurationsdatei hat einen ung\u0
|
|||
couldNotFindTemplate = Vorlage {0} konnte nicht gefunden werden.
|
||||
creatingConfigFromTemplate = Erstelle Konfiguration aus Vorlage: {0}
|
||||
creatingEmptyConfig = Erstelle leere Konfiguration: {0}
|
||||
creatingPortal = Erzeuge Portal bei {0},{1},{2}.
|
||||
day = Tag
|
||||
days = Tage
|
||||
defaultBanReason = Der Bann-Hammer hat gesprochen!
|
||||
|
@ -83,7 +83,6 @@ gcentities = Einheiten
|
|||
gcfree = Freier Speicher: {0} MB
|
||||
gcmax = Maximaler Speicher: {0} MB
|
||||
gctotal = Reservierter Speicher: {0} MB
|
||||
generatingPortal = \u00a77Erstelle ein Ausgangsportal.
|
||||
geoIpUrlEmpty = GeoIP Download-URL ist leer.
|
||||
geoIpUrlInvalid = GeoIP Download-URL ist ung\u00fcltig.
|
||||
geoipJoinFormat = Spieler {0} kommt aus {1}
|
||||
|
@ -330,7 +329,6 @@ unlimitedItemPermission = \u00a7cDu hast keine Rechte f\u00fcr {0}.
|
|||
unlimitedItems = Unendliche Objekte:
|
||||
unmutedPlayer = Spieler {0} ist nicht mehr stumm.
|
||||
upgradingFilesError = Fehler beim Aktualisieren der Dateien
|
||||
userCreatedPortal = {0} benutzt ein Portal und hat ein Ausgangsportal erstellt.
|
||||
userDoesNotExist = Spieler {0} existiert nicht.
|
||||
userIsAway = {0} ist abwesend.
|
||||
userIsNotAway = {0} ist wieder da.
|
||||
|
@ -338,7 +336,6 @@ userJailed = \u00a77Du wurdest eingesperrt.
|
|||
userUsedPortal = {0} benutzt ein vorhandenes Ausgangsportal.
|
||||
userdataMoveBackError = Verschieben von userdata/{0}.tmp nach userdata/{1} gescheitert.
|
||||
userdataMoveError = Verschieben von userdata/{0} nach userdata/{1}.tmp gescheitert.
|
||||
usingPortal = \u00a77Teleportiere durch Portal zum Ausgangsportal.
|
||||
usingTempFolderForTesting = Benutze tempor\u00e4ren Ordner zum Testen:
|
||||
versionMismatch = Versionen nicht identisch! Bitte aktualisiere {0}.
|
||||
versionMismatchAll = Versionen ungleich! Bitte aktualisiere alle Essentials jars auf die gleiche Version.
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# Single quotes have to be doubled: ''
|
||||
# Translations start here
|
||||
# by:
|
||||
action = * {0} {1}
|
||||
addedToAccount = \u00a7a{0} has been added to your account.
|
||||
addedToOthersAccount = \u00a7a{0} has been added to {1} account.
|
||||
alertBroke = broke:
|
||||
|
@ -44,7 +45,6 @@ corruptNodeInConfig = \u00a74Notice: Your configuration file has a corrupt {0} n
|
|||
couldNotFindTemplate = Could not find template {0}
|
||||
creatingConfigFromTemplate = Creating config from template: {0}
|
||||
creatingEmptyConfig = Creating empty config: {0}
|
||||
creatingPortal = Creating portal at {0},{1},{2}.
|
||||
day = day
|
||||
days = days
|
||||
defaultBanReason = The Ban Hammer has spoken!
|
||||
|
@ -83,7 +83,6 @@ gcentities = entities
|
|||
gcfree = Free memory: {0} MB
|
||||
gcmax = Maximum memory: {0} MB
|
||||
gctotal = Allocated memory: {0} MB
|
||||
generatingPortal = \u00a77Generating an exit portal.
|
||||
geoIpUrlEmpty = GeoIP download url is empty.
|
||||
geoIpUrlInvalid = GeoIP download url is invalid.
|
||||
geoipJoinFormat = Player {0} comes from {1}
|
||||
|
@ -330,7 +329,6 @@ unlimitedItemPermission = \u00a7cNo permission for unlimited item {0}.
|
|||
unlimitedItems = Unlimited items:
|
||||
unmutedPlayer = Player {0} unmuted.
|
||||
upgradingFilesError = Error while upgrading the files
|
||||
userCreatedPortal = {0} used a portal and generated an exit portal.
|
||||
userDoesNotExist = The user {0} does not exist.
|
||||
userIsAway = {0} is now AFK
|
||||
userIsNotAway = {0} is no longer AFK
|
||||
|
@ -338,7 +336,6 @@ userJailed = \u00a77You have been jailed
|
|||
userUsedPortal = {0} used an existing exit portal.
|
||||
userdataMoveBackError = Failed to move userdata/{0}.tmp to userdata/{1}
|
||||
userdataMoveError = Failed to move userdata/{0} to userdata/{1}.tmp
|
||||
usingPortal = \u00a77Teleporting via portal to an existing portal.
|
||||
usingTempFolderForTesting = Using temp folder for testing:
|
||||
versionMismatch = Version mismatch! Please update {0} to the same version.
|
||||
versionMismatchAll = Version mismatch! Please update all Essentials jars to the same version.
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# Single quotes have to be doubled: ''
|
||||
# Translations start here
|
||||
# by:
|
||||
action = * {0} {1}
|
||||
addedToAccount = \u00a7a{0} a \u00e9t\u00e9 rajout\u00e9 a votre compte.
|
||||
addedToOthersAccount = \u00a7a{0} a \u00e9t\u00e9 ajout\u00e9 \u00e0 {1} compte.
|
||||
alertBroke = a cass\u00e9:
|
||||
|
@ -44,7 +45,6 @@ corruptNodeInConfig = \u00a74Annonce: Votre fichier de configuration a un {0} n\
|
|||
couldNotFindTemplate = Le mod\u00e8le {0} est introuvable
|
||||
creatingConfigFromTemplate = Cr\u00e9ation de la configuration \u00e0 partir du mod\u00e8le : {0}
|
||||
creatingEmptyConfig = Cr\u00e9ation d''une configuration vierge : {0}
|
||||
creatingPortal = Cr\u00e9ation d''un portail \u00e0 {0},{1},{2}.
|
||||
day = jour
|
||||
days = jours
|
||||
defaultBanReason = Le marteau du ban a frapp\u00e9!
|
||||
|
@ -83,7 +83,6 @@ gcentities = entit\u00e9s
|
|||
gcfree = Free memory: {0} Mo
|
||||
gcmax = M\u00e9moire maximale: {0} Mo
|
||||
gctotal = Allocated memory: {0} Mo
|
||||
generatingPortal = \u00a77G\u00e9n\u00e9ration d''un portail de sortie.
|
||||
geoIpUrlEmpty = L''url de t\u00e9l\u00e9chargement de GeoIP est vide.
|
||||
geoIpUrlInvalid = L''url de t\u00e9l\u00e9chargement de GeoIP est invalide.
|
||||
geoipJoinFormat = Joueur {0} vient de {1}
|
||||
|
@ -330,7 +329,6 @@ unlimitedItemPermission = \u00a7cPas de permission pour l''objet illimit\u00e9 {
|
|||
unlimitedItems = Objets illimit\u00e9s:
|
||||
unmutedPlayer = Le joueur {0} n''est plus muet.
|
||||
upgradingFilesError = Erreur durant la mise \u00e0 jour des fichiers.
|
||||
userCreatedPortal = {0} a utilis\u00e9 un portail et a g\u00e9n\u00e9r\u00e9 un portail de sortie.
|
||||
userDoesNotExist = L''utilisateur {0} n''existe pas.
|
||||
userIsAway = {0} s''est mis en AFK
|
||||
userIsNotAway = {0} n''est plus inactif
|
||||
|
@ -338,7 +336,6 @@ userJailed = \u00a77Vous avez \u00e9t\u00e9 emprisonn\u00e9
|
|||
userUsedPortal = {0} a utilis\u00e9 un portail existant.
|
||||
userdataMoveBackError = Echec du d\u00e9placement de userdata/{0}.tmp \u00e0 userdata/{1}
|
||||
userdataMoveError = Echec du d\u00e9placement de userdata/{0} \u00e0 userdata/{1}.tmp
|
||||
usingPortal = \u00a77T\u00e9l\u00e9portation via portail vers un portail existant.
|
||||
usingTempFolderForTesting = Utilise un fichier temporaire pour un test.
|
||||
versionMismatch = Versions diff\u00e9rentes! Mettez s''il vous pla\u00eet {0} \u00e0 la m\u00eame version.
|
||||
versionMismatchAll = Mauvaise version! S''il vous plait mettez des jars Essentiels de version identique.
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# Single quotes have to be doubled: ''
|
||||
# Translations start here
|
||||
# by: Geertje123
|
||||
action = * {0} {1}
|
||||
addedToAccount = \u00a7a{0} is gestort op je account.
|
||||
addedToOthersAccount = \u00a7a{0} is overgemaakt naar {1}''s rekening
|
||||
alertBroke = gebroken:
|
||||
|
@ -44,7 +45,6 @@ corruptNodeInConfig = \u00a74Waarschuwing: Het configuratiebestand bevat een fou
|
|||
couldNotFindTemplate = Het sjabloon kon niet worden gevonden {0}
|
||||
creatingConfigFromTemplate = Bezig met aanmaken van een config vanaf sjabloon: {0}
|
||||
creatingEmptyConfig = Bezig met een lege config aanmaken: {0}
|
||||
creatingPortal = Bezig met cre\u00ebren van portal bij {0},{1},{2}.
|
||||
day = dag
|
||||
days = dagen
|
||||
defaultBanReason = De Ban Hamer heeft gesproken!
|
||||
|
@ -83,7 +83,6 @@ gcentities = entities
|
|||
gcfree = Vrij geheugen: {0} MB
|
||||
gcmax = Maximaal geheugen: {0} MB
|
||||
gctotal = Gealloceerd geheugen: {0} MB
|
||||
generatingPortal = \u00a77Uitgangs portal aan het cre\u00ebren.
|
||||
geoIpUrlEmpty = GeoIP download url is leeg.
|
||||
geoIpUrlInvalid = GeoIP download url is ongeldig.
|
||||
geoipJoinFormat = Speler {0} komt uit {1}
|
||||
|
@ -330,7 +329,6 @@ unlimitedItemPermission = \u00a7cOnbevoegd om oneindig {0} te hebben.
|
|||
unlimitedItems = Oneindige voorwerpen:
|
||||
unmutedPlayer = Speler {0} mag weer spreken.
|
||||
upgradingFilesError = Fout tijdens het upgraden van de bestanden
|
||||
userCreatedPortal = {0} gebruikte een portal en maakte een uitgangs portal.
|
||||
userDoesNotExist = Speler {0} bestaat niet.
|
||||
userIsAway = {0} is nu AFK
|
||||
userIsNotAway = {0} is niet meer AFK
|
||||
|
@ -338,7 +336,6 @@ userJailed = \u00a77Je bent in de gevangenis gezet.
|
|||
userUsedPortal = {0} gebruikte een bestaande uitgangs portal.
|
||||
userdataMoveBackError = Fout bij het verplaasten van userdata/{0}.tmp naar userdata/{1}
|
||||
userdataMoveError = Fout bij het verplaasten van userdata/{0} naar userdata/{1}.tmp
|
||||
usingPortal = \u00a77Bezig met via de portal naar de uitgangs portal.
|
||||
usingTempFolderForTesting = Tijdelijke map om te testen:
|
||||
versionMismatch = Verkeerde versie! Update {0} naar dezelfde versie.
|
||||
versionMismatchAll = Verkeerde versie! Update alle Essentials jars naar dezelfde versie.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
build.xml.data.CRC32=cbf94f59
|
||||
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.
|
||||
# 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
|
||||
|
|
|
@ -48,4 +48,9 @@ v 1.4:
|
|||
Enable to allow default Bukkit based permissions to remain enabled, unless directly negated within GroupManager.
|
||||
- Fixed reading world mirrors from the config.
|
||||
- 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.
|
|
@ -1,9 +1,10 @@
|
|||
settings:
|
||||
config:
|
||||
# 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
|
||||
|
||||
# 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.
|
||||
bukkit_perms_override: false
|
||||
|
||||
|
@ -21,6 +22,9 @@ settings:
|
|||
|
||||
mirrors:
|
||||
# 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_nether
|
||||
- world2
|
||||
|
|
|
@ -39,7 +39,6 @@ groups:
|
|||
- essentials.nick
|
||||
- essentials.pay
|
||||
- essentials.ping
|
||||
- essentials.portal
|
||||
- essentials.powertool
|
||||
- essentials.protect
|
||||
- essentials.sethome
|
||||
|
|
|
@ -52,10 +52,10 @@ public class GMConfiguration {
|
|||
}
|
||||
|
||||
public boolean isOpOverride() {
|
||||
return GMconfig.getBoolean("settings.config.bukkit_perms_override", true);
|
||||
return GMconfig.getBoolean("settings.config.opOverrides", true);
|
||||
}
|
||||
public boolean isBukkitPermsOverride() {
|
||||
return GMconfig.getBoolean("settings.config.opOverrides", true);
|
||||
return GMconfig.getBoolean("settings.config.bukkit_perms_override", false);
|
||||
}
|
||||
|
||||
public Map<String, Object> getMirrorsMap() {
|
||||
|
|
|
@ -763,6 +763,7 @@ public class GroupManager extends JavaPlugin {
|
|||
permissionResult = permissionHandler.checkFullUserPermission(auxUser, args[1]);
|
||||
if (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) {
|
||||
sender.sendMessage(ChatColor.RED + "The player doesn't have access to that permission");
|
||||
sender.sendMessage(ChatColor.YELLOW + "SuperPerms reports Node: " + targetPlayer.hasPermission(args[1]));
|
||||
return false;
|
||||
}
|
||||
//PARECE OK
|
||||
|
|
|
@ -7,6 +7,7 @@ package org.anjocaido.groupmanager.permissions;
|
|||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
import org.anjocaido.groupmanager.GroupManager;
|
||||
import org.anjocaido.groupmanager.data.Group;
|
||||
|
@ -14,6 +15,7 @@ import org.anjocaido.groupmanager.dataholder.WorldDataHolder;
|
|||
import org.anjocaido.groupmanager.data.User;
|
||||
import org.anjocaido.groupmanager.utils.PermissionCheckResult;
|
||||
import org.anjocaido.groupmanager.utils.PermissionCheckResult.Type;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
|
@ -93,8 +95,19 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
for (String group : getGroups(userName)) {
|
||||
for (String perm : ph.getGroup(group).getPermissionList()) {
|
||||
if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-"+perm)))
|
||||
if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-"+perm))) {
|
||||
playerPermArray.add(perm);
|
||||
|
||||
Map<String, Boolean> children = GroupManager.BukkitPermissions.getChildren(perm);
|
||||
if (children != null) {
|
||||
for (String child : children.keySet()) {
|
||||
if (children.get(child))
|
||||
if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-"+perm)))
|
||||
playerPermArray.add(child);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -566,6 +579,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|| result.resultType.equals(PermissionCheckResult.Type.FOUND)) {
|
||||
return true;
|
||||
}
|
||||
if (Bukkit.getPlayer(user.getName()).hasPermission(permission))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -587,7 +603,6 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
PermissionCheckResult resultUser = checkUserOnlyPermission(user, targetPermission);
|
||||
if (!resultUser.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) {
|
||||
return resultUser;
|
||||
|
||||
}
|
||||
|
||||
//IT ONLY CHECKS GROUPS PERMISSIONS IF RESULT FOR USER IS NOT FOUND
|
||||
|
@ -603,6 +618,12 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
return resultSubGroup;
|
||||
}
|
||||
}
|
||||
|
||||
if (Bukkit.getPlayer(user.getName()).hasPermission(targetPermission)) {
|
||||
result.resultType = PermissionCheckResult.Type.FOUND;
|
||||
result.owner = user;
|
||||
return result;
|
||||
}
|
||||
|
||||
//THEN IT RETURNS A NOT FOUND
|
||||
return result;
|
||||
|
|
|
@ -150,8 +150,19 @@ public class BukkitPermissions {
|
|||
value = true;
|
||||
}
|
||||
|
||||
if (value == true)
|
||||
if (value == true){
|
||||
// Set the root permission
|
||||
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)
|
||||
|
@ -171,6 +182,22 @@ public class BukkitPermissions {
|
|||
player.recalculatePermissions();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a map of the child permissions as defined by the supplying plugin
|
||||
* null is empty
|
||||
*
|
||||
* @param node
|
||||
* @return
|
||||
*/
|
||||
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) {
|
||||
List<String> perms = new ArrayList<String>();
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
name: GroupManager
|
||||
version: "1.4 (Phoenix)"
|
||||
version: "1.5 (Phoenix)"
|
||||
main: org.anjocaido.groupmanager.GroupManager
|
||||
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.
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
package com.earth2me.essentials.update;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
public abstract class WorkListener
|
||||
public abstract class AbstractWorkListener
|
||||
{
|
||||
public WorkListener(final Plugin plugin, final VersionInfo newVersionInfo)
|
||||
public AbstractWorkListener(final Plugin plugin, final VersionInfo newVersionInfo)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
this.newVersionInfo = newVersionInfo;
|
|
@ -1,16 +1,16 @@
|
|||
package com.earth2me.essentials.update;
|
||||
|
||||
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 java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import org.bukkit.Bukkit;
|
||||
import com.earth2me.essentials.update.chat.Command;
|
||||
import com.earth2me.essentials.update.chat.ConfigCommand;
|
||||
import com.earth2me.essentials.update.chat.ErrorsCommand;
|
||||
import com.earth2me.essentials.update.chat.HelpCommand;
|
||||
import com.earth2me.essentials.update.chat.IrcBot;
|
||||
import com.earth2me.essentials.update.chat.ListCommand;
|
||||
import com.earth2me.essentials.update.chat.StartupCommand;
|
||||
import com.earth2me.essentials.update.chat.UsernameUtil;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -21,7 +21,6 @@ import org.bukkit.event.player.PlayerListener;
|
|||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.jibble.pircbot.User;
|
||||
|
||||
|
||||
public class EssentialsHelp extends PlayerListener
|
||||
|
@ -29,14 +28,19 @@ public class EssentialsHelp extends PlayerListener
|
|||
private transient Player chatUser;
|
||||
private final transient Server server;
|
||||
private final transient Plugin plugin;
|
||||
private final static Charset UTF8 = Charset.forName("utf-8");
|
||||
private transient IrcBot ircBot;
|
||||
private final transient Map<String, Command> commands = new HashMap<String, Command>();
|
||||
|
||||
public EssentialsHelp(final Plugin plugin)
|
||||
{
|
||||
super();
|
||||
this.plugin = plugin;
|
||||
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()
|
||||
|
@ -46,7 +50,7 @@ public class EssentialsHelp extends PlayerListener
|
|||
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"))
|
||||
{
|
||||
|
@ -74,11 +78,7 @@ public class EssentialsHelp extends PlayerListener
|
|||
|
||||
public void onDisable()
|
||||
{
|
||||
if ( ircBot != null)
|
||||
{
|
||||
ircBot.quit();
|
||||
ircBot = null;
|
||||
}
|
||||
closeConnection();
|
||||
}
|
||||
|
||||
private boolean sendChatMessage(final Player player, final String message)
|
||||
|
@ -90,35 +90,19 @@ public class EssentialsHelp extends PlayerListener
|
|||
}
|
||||
if (ircBot == null)
|
||||
{
|
||||
if (messageCleaned.equalsIgnoreCase("yes"))
|
||||
{
|
||||
player.sendMessage("Connecting...");
|
||||
connectToIRC(player);
|
||||
return true;
|
||||
}
|
||||
if (messageCleaned.equalsIgnoreCase("no") || message.equalsIgnoreCase("!quit"))
|
||||
{
|
||||
chatUser = null;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return handleAnswer(messageCleaned, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ircBot.isKicked()) {
|
||||
chatUser = null;
|
||||
ircBot.quit();
|
||||
ircBot = null;
|
||||
if (ircBot.isKicked())
|
||||
{
|
||||
closeConnection();
|
||||
return false;
|
||||
}
|
||||
final String lowMessage = messageCleaned.toLowerCase();
|
||||
final String lowMessage = messageCleaned.toLowerCase(Locale.ENGLISH);
|
||||
if (lowMessage.startsWith("!quit"))
|
||||
{
|
||||
chatUser = null;
|
||||
if (ircBot != null) {
|
||||
ircBot.quit();
|
||||
ircBot = null;
|
||||
}
|
||||
closeConnection();
|
||||
player.sendMessage("Connection closed.");
|
||||
return true;
|
||||
}
|
||||
|
@ -126,52 +110,8 @@ public class EssentialsHelp extends PlayerListener
|
|||
{
|
||||
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;
|
||||
}
|
||||
ircBot.sendMessage(messageCleaned);
|
||||
|
@ -180,300 +120,62 @@ public class EssentialsHelp extends PlayerListener
|
|||
}
|
||||
}
|
||||
|
||||
private String buildIrcName()
|
||||
private void closeConnection()
|
||||
{
|
||||
final StringBuilder nameBuilder = new StringBuilder();
|
||||
nameBuilder.append(chatUser.getName());
|
||||
|
||||
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())
|
||||
chatUser = null;
|
||||
if (ircBot != null)
|
||||
{
|
||||
nameBuilder.append(" CB");
|
||||
nameBuilder.append(versionMatch.group(4));
|
||||
ircBot.quit();
|
||||
ircBot = null;
|
||||
}
|
||||
}
|
||||
|
||||
final Plugin essentials = server.getPluginManager().getPlugin("Essentials");
|
||||
if (essentials != null)
|
||||
private boolean handleAnswer(final String message, final Player player)
|
||||
{
|
||||
if (message.equalsIgnoreCase("yes"))
|
||||
{
|
||||
nameBuilder.append(" ESS");
|
||||
nameBuilder.append(essentials.getDescription().getVersion());
|
||||
player.sendMessage("Connecting...");
|
||||
connectToIRC(player);
|
||||
return true;
|
||||
}
|
||||
|
||||
final Plugin groupManager = server.getPluginManager().getPlugin("GroupManager");
|
||||
if (groupManager != null)
|
||||
if (message.equalsIgnoreCase("no") || message.equalsIgnoreCase("!quit"))
|
||||
{
|
||||
nameBuilder.append(" GM");
|
||||
if (!groupManager.isEnabled())
|
||||
{
|
||||
nameBuilder.append('!');
|
||||
}
|
||||
chatUser = null;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
final Plugin pex = server.getPluginManager().getPlugin("PermissionsEx");
|
||||
if (pex != null)
|
||||
private boolean handleCommands(final String lowMessage, final Player player)
|
||||
{
|
||||
final String[] parts = lowMessage.split(" ");
|
||||
if (commands.containsKey(parts[0]))
|
||||
{
|
||||
nameBuilder.append(" PEX");
|
||||
if (!pex.isEnabled())
|
||||
{
|
||||
nameBuilder.append('!');
|
||||
}
|
||||
nameBuilder.append(pex.getDescription().getVersion());
|
||||
commands.get(parts[0]).run(ircBot, player);
|
||||
return true;
|
||||
}
|
||||
|
||||
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();
|
||||
return false;
|
||||
}
|
||||
|
||||
private void connectToIRC(final Player player)
|
||||
{
|
||||
ircBot = new IrcBot(player, "Ess_" + player.getName(), buildIrcName());
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
ircBot = new IrcBot(player, "Ess_" + player.getName(), UsernameUtil.createUsername(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerChat(PlayerChatEvent event)
|
||||
public void onPlayerChat(final PlayerChatEvent event)
|
||||
{
|
||||
if (event.getPlayer() == chatUser)
|
||||
{
|
||||
boolean success = sendChatMessage(event.getPlayer(), event.getMessage());
|
||||
final boolean success = sendChatMessage(event.getPlayer(), event.getMessage());
|
||||
event.setCancelled(success);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerQuit(PlayerQuitEvent event)
|
||||
public void onPlayerQuit(final PlayerQuitEvent event)
|
||||
{
|
||||
chatUser = null;
|
||||
if (ircBot != null) {
|
||||
ircBot.quit();
|
||||
ircBot = null;
|
||||
}
|
||||
return;
|
||||
closeConnection();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.earth2me.essentials.update;
|
||||
|
||||
import com.earth2me.essentials.update.UpdateCheck.CheckResult;
|
||||
import java.util.logging.Level;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
@ -16,26 +17,20 @@ public class EssentialsUpdate extends JavaPlugin
|
|||
public void onEnable()
|
||||
{
|
||||
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.registerEvents();
|
||||
|
||||
final UpdateCheck updateCheck = new UpdateCheck(this);
|
||||
updateCheck.checkForUpdates();
|
||||
updateProcess = new UpdateProcess(this, updateCheck);
|
||||
updateProcess.registerEvents();
|
||||
|
||||
Bukkit.getLogger().info("EssentialsUpdate " + getDescription().getVersion() + " loaded.");
|
||||
Bukkit.getLogger().log(Level.INFO, "EssentialsUpdate {0} loaded.", getDescription().getVersion());
|
||||
|
||||
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();
|
||||
}
|
||||
else
|
||||
|
|
|
@ -12,7 +12,8 @@ import java.net.URL;
|
|||
import java.net.URLConnection;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.logging.Level;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
|
||||
public class GetFile
|
||||
|
@ -53,7 +54,7 @@ public class GetFile
|
|||
}
|
||||
catch (NoSuchAlgorithmException ex)
|
||||
{
|
||||
// Ignore because the code is never called
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -101,7 +102,7 @@ public class GetFile
|
|||
}
|
||||
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
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.earth2me.essentials.update;
|
|||
import java.io.File;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import org.bukkit.Bukkit;
|
||||
|
@ -22,7 +21,7 @@ public class UpdateCheck
|
|||
private final transient Plugin plugin;
|
||||
private transient boolean essentialsInstalled;
|
||||
|
||||
public UpdateCheck(Plugin plugin)
|
||||
public UpdateCheck(final Plugin plugin)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
updateFile = new UpdateFile(plugin);
|
||||
|
@ -31,21 +30,20 @@ public class UpdateCheck
|
|||
|
||||
private void checkForEssentials()
|
||||
{
|
||||
PluginManager pm = plugin.getServer().getPluginManager();
|
||||
Plugin essentials = pm.getPlugin("Essentials");
|
||||
if (essentials == null)
|
||||
final PluginManager pluginManager = plugin.getServer().getPluginManager();
|
||||
final Plugin essentials = pluginManager.getPlugin("Essentials");
|
||||
essentialsInstalled = essentials != null;
|
||||
if (essentialsInstalled)
|
||||
{
|
||||
currentVersion = new Version(essentials.getDescription().getVersion());
|
||||
}
|
||||
else
|
||||
{
|
||||
essentialsInstalled = false;
|
||||
if (new File(plugin.getDataFolder().getParentFile(), "Essentials.jar").exists())
|
||||
{
|
||||
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()
|
||||
|
@ -71,16 +69,17 @@ public class UpdateCheck
|
|||
return result;
|
||||
}
|
||||
|
||||
int getNewBukkitVersion()
|
||||
public int getNewBukkitVersion()
|
||||
{
|
||||
return bukkitResult;
|
||||
}
|
||||
|
||||
VersionInfo getNewVersionInfo()
|
||||
public VersionInfo getNewVersionInfo()
|
||||
{
|
||||
return updateFile.getVersions().get(newVersion);
|
||||
}
|
||||
|
||||
|
||||
public enum CheckResult
|
||||
{
|
||||
NEW_ESS, NEW_ESS_BUKKIT, NEW_BUKKIT, OK, UNKNOWN
|
||||
|
|
|
@ -14,13 +14,14 @@ import java.util.Map;
|
|||
import java.util.TreeMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
|
||||
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 BigInteger PUBLIC_KEY = new BigInteger("5ha6a2d4qdy17ttkg8evh74sl5a87djojwenu12k1lvy8ui6003e6l06rntczpoh99mhc3txj8mqlxw111oyy9yl7s7qpyluyzix3j1odxrxx4u52gxvyu6qiteapczkzvi7rxgeqsozz7b19rdx73a7quo9ybwpz1cr82r7x5k0pg2a73pjjsv2j1awr13azo7klrcxp9y5xxwf5qv1s3tw4zqftli18u0ek5qkbzfbgk1v5n2f11pkwwk6p0mibrn26wnjbv11vyiqgu95o7busmt6vf5q7grpcenl637w83mbin56s3asj1131b2mscj9xep3cbj7la9tgsxl5bj87vzy8sk2d34kzwqdqgh9nry43nqqus12l1stmiv184r8r3jcy8w43e8h1u1mzklldb5eytkuhayqik8l3ns04hwt8sgacvw534be8sx26qrn5s1", 36);
|
||||
private final transient File file;
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
package com.earth2me.essentials.update;
|
||||
|
||||
import com.earth2me.essentials.update.states.InstallationFinishedEvent;
|
||||
import com.earth2me.essentials.update.states.StateMachine;
|
||||
import java.util.List;
|
||||
import com.earth2me.essentials.update.tasks.SelfUpdate;
|
||||
import java.util.logging.Level;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
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.Type;
|
||||
import org.bukkit.event.player.PlayerChatEvent;
|
||||
|
@ -23,6 +27,7 @@ public class UpdateProcess extends PlayerListener
|
|||
|
||||
public UpdateProcess(final Plugin plugin, final UpdateCheck updateCheck)
|
||||
{
|
||||
super();
|
||||
this.plugin = plugin;
|
||||
this.updateCheck = updateCheck;
|
||||
}
|
||||
|
@ -32,6 +37,77 @@ public class UpdateProcess extends PlayerListener
|
|||
final PluginManager pluginManager = plugin.getServer().getPluginManager();
|
||||
pluginManager.registerEvent(Type.PLAYER_QUIT, this, Priority.Low, 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
|
||||
|
@ -58,6 +134,14 @@ public class UpdateProcess extends PlayerListener
|
|||
public void onPlayerJoin(final PlayerJoinEvent event)
|
||||
{
|
||||
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())
|
||||
{
|
||||
player.sendMessage("Hello " + player.getDisplayName());
|
||||
|
@ -82,48 +166,22 @@ public class UpdateProcess extends PlayerListener
|
|||
}
|
||||
}
|
||||
|
||||
public void doAutomaticUpdate()
|
||||
{
|
||||
|
||||
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);
|
||||
}
|
||||
final UpdatesDownloader downloader = new UpdatesDownloader(plugin, info);
|
||||
downloader.start();
|
||||
}
|
||||
|
||||
public void doManualUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
public void onCommand(final CommandSender sender)
|
||||
{
|
||||
if (sender instanceof Player && sender.hasPermission("essentials.install"))
|
||||
if (sender instanceof Player && sender.hasPermission("essentials.update"))
|
||||
{
|
||||
if (currentPlayer == null)
|
||||
{
|
||||
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.");
|
||||
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.");
|
||||
stateMachine = new StateMachine(plugin, currentPlayer, updateCheck.getNewVersionInfo());
|
||||
final StateMachine.MachineResult result = stateMachine.askQuestion();
|
||||
if (result == StateMachine.MachineResult.DONE)
|
||||
{
|
||||
startWork();
|
||||
}
|
||||
startWork();
|
||||
}
|
||||
}
|
||||
if (!currentPlayer.equals(sender))
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
package com.earth2me.essentials.update;
|
||||
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
public class UpdatesDownloader extends WorkListener
|
||||
{
|
||||
public UpdatesDownloader(final Plugin plugin, final VersionInfo newVersionInfo)
|
||||
{
|
||||
super(plugin, newVersionInfo);
|
||||
}
|
||||
|
||||
public void start()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkAbort(String message)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkDone(String message)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
}
|
|
@ -147,7 +147,7 @@ public class Version implements Comparable<Version>
|
|||
hash = 71 * hash + this.major;
|
||||
hash = 71 * hash + this.minor;
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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.");
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.earth2me.essentials.update;
|
||||
package com.earth2me.essentials.update.chat;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Level;
|
||||
|
@ -95,7 +95,9 @@ public class IrcBot extends PircBot
|
|||
}
|
||||
|
||||
@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()))
|
||||
{
|
||||
|
@ -111,25 +113,33 @@ public class IrcBot extends PircBot
|
|||
}
|
||||
|
||||
@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));
|
||||
}
|
||||
|
||||
@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));
|
||||
}
|
||||
|
||||
@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));
|
||||
}
|
||||
|
||||
@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));
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
package com.earth2me.essentials.update.states;
|
||||
|
||||
import com.earth2me.essentials.update.WorkListener;
|
||||
import com.earth2me.essentials.update.AbstractWorkListener;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
||||
|
@ -66,19 +66,29 @@ public abstract class AbstractState
|
|||
final String trimmedAnswer = answer.trim();
|
||||
if (trimmedAnswer.equalsIgnoreCase("quit")
|
||||
|| trimmedAnswer.equalsIgnoreCase("bye")
|
||||
|| trimmedAnswer.equalsIgnoreCase("abort"))
|
||||
|| trimmedAnswer.equalsIgnoreCase("abort")
|
||||
|| trimmedAnswer.equalsIgnoreCase("cancel")
|
||||
|| trimmedAnswer.equalsIgnoreCase("exit"))
|
||||
{
|
||||
abort();
|
||||
return null;
|
||||
}
|
||||
final boolean found = reactOnAnswer(trimmedAnswer);
|
||||
if (found)
|
||||
try
|
||||
{
|
||||
return getNextState();
|
||||
final boolean found = reactOnAnswer(trimmedAnswer);
|
||||
if (found)
|
||||
{
|
||||
return getNextState();
|
||||
}
|
||||
else
|
||||
{
|
||||
sender.sendMessage("Answer not recognized.");
|
||||
return this;
|
||||
}
|
||||
}
|
||||
else
|
||||
catch (RuntimeException ex)
|
||||
{
|
||||
sender.sendMessage("Answer not recognized.");
|
||||
sender.sendMessage(ex.toString());
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
@ -86,7 +96,7 @@ public abstract class AbstractState
|
|||
/**
|
||||
* Do something based on the answer, that the user gave.
|
||||
*/
|
||||
public void doWork(final WorkListener listener)
|
||||
public void doWork(final AbstractWorkListener listener)
|
||||
{
|
||||
listener.onWorkDone();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
package com.earth2me.essentials.update.states;
|
||||
|
||||
import com.earth2me.essentials.update.WorkListener;
|
||||
import com.earth2me.essentials.update.AbstractWorkListener;
|
||||
import com.earth2me.essentials.update.tasks.InstallModule;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -35,7 +35,7 @@ public class EssentialsChat extends AbstractYesNoState
|
|||
}
|
||||
|
||||
@Override
|
||||
public void doWork(final WorkListener listener)
|
||||
public void doWork(final AbstractWorkListener listener)
|
||||
{
|
||||
if (getAnswer())
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.earth2me.essentials.update.states;
|
||||
|
||||
import com.earth2me.essentials.update.WorkListener;
|
||||
import com.earth2me.essentials.update.AbstractWorkListener;
|
||||
import com.earth2me.essentials.update.tasks.InstallModule;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -35,7 +35,7 @@ public class EssentialsGeoIP extends AbstractYesNoState
|
|||
}
|
||||
|
||||
@Override
|
||||
public void doWork(final WorkListener listener)
|
||||
public void doWork(final AbstractWorkListener listener)
|
||||
{
|
||||
if (getAnswer())
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.earth2me.essentials.update.states;
|
||||
|
||||
import com.earth2me.essentials.update.WorkListener;
|
||||
import com.earth2me.essentials.update.AbstractWorkListener;
|
||||
import com.earth2me.essentials.update.tasks.InstallModule;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -35,7 +35,7 @@ public class EssentialsProtect extends AbstractYesNoState
|
|||
}
|
||||
|
||||
@Override
|
||||
public void doWork(final WorkListener listener)
|
||||
public void doWork(final AbstractWorkListener listener)
|
||||
{
|
||||
if (getAnswer())
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.earth2me.essentials.update.states;
|
||||
|
||||
import com.earth2me.essentials.update.WorkListener;
|
||||
import com.earth2me.essentials.update.AbstractWorkListener;
|
||||
import com.earth2me.essentials.update.tasks.InstallModule;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -35,7 +35,7 @@ public class EssentialsSpawn extends AbstractYesNoState
|
|||
}
|
||||
|
||||
@Override
|
||||
public void doWork(final WorkListener listener)
|
||||
public void doWork(final AbstractWorkListener listener)
|
||||
{
|
||||
if (getAnswer())
|
||||
{
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
package com.earth2me.essentials.update.states;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
|
||||
|
||||
public class InstallationFinishedEvent extends Event
|
||||
{
|
||||
public InstallationFinishedEvent()
|
||||
{
|
||||
super(Type.CUSTOM_EVENT);
|
||||
}
|
||||
}
|
|
@ -1,82 +1,113 @@
|
|||
package com.earth2me.essentials.update.states;
|
||||
|
||||
import com.earth2me.essentials.update.WorkListener;
|
||||
import com.earth2me.essentials.update.VersionInfo;
|
||||
import com.earth2me.essentials.update.UpdateCheck;
|
||||
import com.earth2me.essentials.update.AbstractWorkListener;
|
||||
import java.util.Iterator;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
public class StateMachine extends WorkListener
|
||||
public class StateMachine extends AbstractWorkListener implements Runnable
|
||||
{
|
||||
public enum MachineResult
|
||||
{
|
||||
ABORT, WAIT, DONE
|
||||
ABORT, WAIT, DONE, NONE
|
||||
}
|
||||
private final transient StateMap states = new StateMap();
|
||||
private transient AbstractState current;
|
||||
private final transient Player player;
|
||||
private transient Player player;
|
||||
private transient MachineResult result = MachineResult.NONE;
|
||||
|
||||
public StateMachine(final Plugin plugin, final Player player, final VersionInfo newVersionInfo)
|
||||
public StateMachine(final Plugin plugin, final Player player, final UpdateCheck updateCheck)
|
||||
{
|
||||
super(plugin, newVersionInfo);
|
||||
super(plugin, updateCheck.getNewVersionInfo());
|
||||
this.player = player;
|
||||
states.clear();
|
||||
states.add(new EssentialsChat(states));
|
||||
states.add(new EssentialsSpawn(states));
|
||||
states.add(new EssentialsProtect(states));
|
||||
states.add(new EssentialsGeoIP(states));
|
||||
current = states.values().iterator().next();
|
||||
final UpdateOrInstallation state = new UpdateOrInstallation(states, updateCheck);
|
||||
current = states.put(UpdateOrInstallation.class, state);
|
||||
}
|
||||
|
||||
public MachineResult askQuestion()
|
||||
{
|
||||
while (current.guessAnswer())
|
||||
try
|
||||
{
|
||||
current = current.getNextState();
|
||||
if (current == null)
|
||||
while (current.guessAnswer())
|
||||
{
|
||||
return MachineResult.DONE;
|
||||
current = current.getNextState();
|
||||
if (current == null)
|
||||
{
|
||||
result = MachineResult.DONE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (current != null)
|
||||
{
|
||||
if (player.isOnline())
|
||||
{
|
||||
current.askQuestion(player);
|
||||
}
|
||||
result = MachineResult.WAIT;
|
||||
}
|
||||
}
|
||||
current.askQuestion(player);
|
||||
return MachineResult.WAIT;
|
||||
catch (RuntimeException ex)
|
||||
{
|
||||
player.sendMessage(ex.getMessage());
|
||||
finish();
|
||||
result = MachineResult.ABORT;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public MachineResult reactOnMessage(final String message)
|
||||
{
|
||||
result = MachineResult.NONE;
|
||||
final AbstractState next = current.reactOnAnswer(player, message);
|
||||
if (next == null)
|
||||
{
|
||||
if (current.isAbortion())
|
||||
{
|
||||
return MachineResult.ABORT;
|
||||
finish();
|
||||
result = MachineResult.ABORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
return MachineResult.DONE;
|
||||
result = MachineResult.DONE;
|
||||
}
|
||||
}
|
||||
current = next;
|
||||
return askQuestion();
|
||||
else
|
||||
{
|
||||
current = next;
|
||||
askQuestion();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
private transient Iterator<AbstractState> iterator;
|
||||
|
||||
public void startWork()
|
||||
{
|
||||
iterator = states.values().iterator();
|
||||
callStateWork();
|
||||
Bukkit.getScheduler().scheduleAsyncDelayedTask(getPlugin(), this);
|
||||
}
|
||||
|
||||
private void callStateWork()
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if (!iterator.hasNext())
|
||||
{
|
||||
if (player.isOnline())
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), new Runnable()
|
||||
{
|
||||
player.sendMessage("Installation done.");
|
||||
}
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if (StateMachine.this.player.isOnline())
|
||||
{
|
||||
StateMachine.this.player.sendMessage("Installation done. Reloading server.");
|
||||
}
|
||||
finish();
|
||||
Bukkit.getServer().reload();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
final AbstractState state = iterator.next();
|
||||
|
@ -86,6 +117,7 @@ public class StateMachine extends WorkListener
|
|||
@Override
|
||||
public void onWorkAbort(final String message)
|
||||
{
|
||||
finish();
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), new Runnable()
|
||||
{
|
||||
@Override
|
||||
|
@ -111,8 +143,41 @@ public class StateMachine extends WorkListener
|
|||
{
|
||||
StateMachine.this.player.sendMessage(message);
|
||||
}
|
||||
StateMachine.this.callStateWork();
|
||||
Bukkit.getScheduler().scheduleAsyncDelayedTask(getPlugin(), StateMachine.this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void finish()
|
||||
{
|
||||
current = null;
|
||||
iterator = null;
|
||||
states.clear();
|
||||
getPlugin().getServer().getPluginManager().callEvent(new InstallationFinishedEvent());
|
||||
}
|
||||
|
||||
public void resumeInstallation(final Player player)
|
||||
{
|
||||
this.player = player;
|
||||
if (result == MachineResult.WAIT)
|
||||
{
|
||||
if (current == null)
|
||||
{
|
||||
throw new RuntimeException("State is WAIT, but current state is null!");
|
||||
}
|
||||
current.askQuestion(player);
|
||||
}
|
||||
if (result == MachineResult.DONE && iterator != null)
|
||||
{
|
||||
player.sendMessage("Installation is still running.");
|
||||
}
|
||||
if (result == MachineResult.ABORT)
|
||||
{
|
||||
throw new RuntimeException("Player should not be able to resume an aborted installation.");
|
||||
}
|
||||
if (result == MachineResult.NONE)
|
||||
{
|
||||
throw new RuntimeException("State machine in an undefined state.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,11 +7,6 @@ public class StateMap extends LinkedHashMap<Class<? extends AbstractState>, Abst
|
|||
{
|
||||
public StateMap()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
public AbstractState add(AbstractState state)
|
||||
{
|
||||
return put(state.getClass(), state);
|
||||
super(50);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
package com.earth2me.essentials.update.states;
|
||||
|
||||
import com.earth2me.essentials.update.UpdateCheck;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
||||
public class UpdateOrInstallation extends AbstractState
|
||||
{
|
||||
private final transient UpdateCheck updateCheck;
|
||||
private transient boolean update = false;
|
||||
|
||||
public UpdateOrInstallation(final StateMap stateMap, final UpdateCheck updateCheck)
|
||||
{
|
||||
super(stateMap);
|
||||
this.updateCheck = updateCheck;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean guessAnswer()
|
||||
{
|
||||
if (getUpdateCheck().isEssentialsInstalled()) {
|
||||
update = true;
|
||||
}
|
||||
return update;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractState getNextState()
|
||||
{
|
||||
return update ? getState(Changelog.class) : getState(EssentialsChat.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void askQuestion(final Player sender)
|
||||
{
|
||||
sender.sendMessage("Thank you for choosing Essentials.");
|
||||
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.");
|
||||
sender.sendMessage("Type ok to continue...");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean reactOnAnswer(final String answer)
|
||||
{
|
||||
return answer.equalsIgnoreCase("ok") || answer.equalsIgnoreCase("k") || answer.equalsIgnoreCase("continue");
|
||||
}
|
||||
|
||||
public UpdateCheck getUpdateCheck()
|
||||
{
|
||||
return updateCheck;
|
||||
}
|
||||
|
||||
public boolean isUpdate()
|
||||
{
|
||||
return update;
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@ package com.earth2me.essentials.update.tasks;
|
|||
import com.earth2me.essentials.update.GetFile;
|
||||
import com.earth2me.essentials.update.ModuleInfo;
|
||||
import com.earth2me.essentials.update.VersionInfo;
|
||||
import com.earth2me.essentials.update.WorkListener;
|
||||
import com.earth2me.essentials.update.AbstractWorkListener;
|
||||
import java.io.File;
|
||||
import java.net.URL;
|
||||
import java.util.logging.Level;
|
||||
|
@ -12,16 +12,16 @@ import org.bukkit.Bukkit;
|
|||
|
||||
public class InstallModule implements Runnable, Task
|
||||
{
|
||||
protected final transient WorkListener listener;
|
||||
protected final transient AbstractWorkListener listener;
|
||||
private final transient String moduleName;
|
||||
private final transient String fileName;
|
||||
|
||||
public InstallModule(final WorkListener listener, final String moduleName)
|
||||
public InstallModule(final AbstractWorkListener listener, final String moduleName)
|
||||
{
|
||||
this(listener, moduleName, moduleName + ".jar");
|
||||
}
|
||||
|
||||
public InstallModule(final WorkListener listener, final String moduleName, final String fileName)
|
||||
public InstallModule(final AbstractWorkListener listener, final String moduleName, final String fileName)
|
||||
{
|
||||
this.listener = listener;
|
||||
this.moduleName = moduleName;
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
package com.earth2me.essentials.update.tasks;
|
||||
|
||||
import com.earth2me.essentials.update.AbstractWorkListener;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
|
||||
public class SelfUpdate extends AbstractWorkListener implements Task, Runnable
|
||||
{
|
||||
private final transient AbstractWorkListener listener;
|
||||
|
||||
public SelfUpdate(final AbstractWorkListener listener)
|
||||
{
|
||||
super(listener.getPlugin(), listener.getNewVersionInfo());
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkAbort(final String message)
|
||||
{
|
||||
listener.onWorkAbort(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkDone(final String message)
|
||||
{
|
||||
listener.onWorkDone(message);
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
Bukkit.getServer().reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start()
|
||||
{
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
Bukkit.getScheduler().scheduleAsyncDelayedTask(getPlugin(), new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
new InstallModule(SelfUpdate.this, "EssentialsUpdate").start();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -49,39 +49,39 @@ public class VersionTest extends TestCase
|
|||
@Test
|
||||
public void testCompareTo()
|
||||
{
|
||||
Version a = new Version("1.1.1");
|
||||
Version b = new Version("Dev1.1.2");
|
||||
Version c = new Version("1.1.2");
|
||||
Version d = new Version("1.2.0");
|
||||
Version e = new Version("2.0.0");
|
||||
Version f = new Version("Pre1.1.1.1");
|
||||
Version g = new Version("Dev1.2.2");
|
||||
assertTrue("Testing dev", a.compareTo(b) < 0);
|
||||
assertTrue("Testing dev", b.compareTo(a) > 0);
|
||||
assertTrue("Testing build", a.compareTo(c) < 0);
|
||||
assertTrue("Testing build", c.compareTo(a) > 0);
|
||||
assertTrue("Testing minor", a.compareTo(d) < 0);
|
||||
assertTrue("Testing minor", d.compareTo(a) > 0);
|
||||
assertTrue("Testing major", a.compareTo(e) < 0);
|
||||
assertTrue("Testing major", e.compareTo(a) > 0);
|
||||
assertTrue("Testing pre", f.compareTo(a) < 0);
|
||||
assertTrue("Testing pre", a.compareTo(f) > 0);
|
||||
assertTrue("Testing dev vs dev", b.compareTo(g) < 0);
|
||||
assertTrue("Testing dev vs dev", g.compareTo(b) > 0);
|
||||
final Version verA = new Version("1.1.1");
|
||||
final Version verB = new Version("Dev1.1.2");
|
||||
final Version verC = new Version("1.1.2");
|
||||
final Version verD = new Version("1.2.0");
|
||||
final Version verE = new Version("2.0.0");
|
||||
final Version verF = new Version("Pre1.1.1.1");
|
||||
final Version verG = new Version("Dev1.2.2");
|
||||
assertTrue("Testing dev", verA.compareTo(verB) < 0);
|
||||
assertTrue("Testing dev", verB.compareTo(verA) > 0);
|
||||
assertTrue("Testing build", verA.compareTo(verC) < 0);
|
||||
assertTrue("Testing build", verC.compareTo(verA) > 0);
|
||||
assertTrue("Testing minor", verA.compareTo(verD) < 0);
|
||||
assertTrue("Testing minor", verD.compareTo(verA) > 0);
|
||||
assertTrue("Testing major", verA.compareTo(verE) < 0);
|
||||
assertTrue("Testing major", verE.compareTo(verA) > 0);
|
||||
assertTrue("Testing pre", verF.compareTo(verA) < 0);
|
||||
assertTrue("Testing pre", verA.compareTo(verF) > 0);
|
||||
assertTrue("Testing dev vs dev", verB.compareTo(verG) < 0);
|
||||
assertTrue("Testing dev vs dev", verG.compareTo(verB) > 0);
|
||||
final TreeSet<Version> set = new TreeSet<Version>();
|
||||
set.add(a);
|
||||
set.add(b);
|
||||
set.add(c);
|
||||
set.add(d);
|
||||
set.add(e);
|
||||
set.add(f);
|
||||
set.add(g);
|
||||
assertEquals("Testing sorting", f, set.pollFirst());
|
||||
assertEquals("Testing sorting", a, set.pollFirst());
|
||||
assertEquals("Testing sorting", c, set.pollFirst());
|
||||
assertEquals("Testing sorting", d, set.pollFirst());
|
||||
assertEquals("Testing sorting", e, set.pollFirst());
|
||||
assertEquals("Testing sorting", b, set.pollFirst());
|
||||
assertEquals("Testing sorting", g, set.pollFirst());
|
||||
set.add(verA);
|
||||
set.add(verB);
|
||||
set.add(verC);
|
||||
set.add(verD);
|
||||
set.add(verE);
|
||||
set.add(verF);
|
||||
set.add(verG);
|
||||
assertEquals("Testing sorting", verF, set.pollFirst());
|
||||
assertEquals("Testing sorting", verA, set.pollFirst());
|
||||
assertEquals("Testing sorting", verC, set.pollFirst());
|
||||
assertEquals("Testing sorting", verD, set.pollFirst());
|
||||
assertEquals("Testing sorting", verE, set.pollFirst());
|
||||
assertEquals("Testing sorting", verB, set.pollFirst());
|
||||
assertEquals("Testing sorting", verG, set.pollFirst());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -124,14 +124,17 @@ public class EssentialsXMPP extends JavaPlugin implements IEssentialsXMPP
|
|||
}
|
||||
|
||||
@Override
|
||||
public void broadcastMessage(final IUser sender, final String message)
|
||||
public void broadcastMessage(final IUser sender, final String message, final String xmppAddress)
|
||||
{
|
||||
ess.broadcastMessage(sender, message);
|
||||
try
|
||||
{
|
||||
for (String address : getSpyUsers())
|
||||
{
|
||||
sendMessage(address, message);
|
||||
if (!address.equalsIgnoreCase(xmppAddress))
|
||||
{
|
||||
sendMessage(address, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
|
@ -24,5 +24,5 @@ public interface IEssentialsXMPP extends Plugin
|
|||
|
||||
boolean toggleSpy(final Player user);
|
||||
|
||||
void broadcastMessage(final IUser sender, final String message);
|
||||
void broadcastMessage(final IUser sender, final String message, final String xmppAddress);
|
||||
}
|
||||
|
|
|
@ -103,7 +103,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
|||
break;
|
||||
default:
|
||||
final IUser sender = parent.getUserByAddress(StringUtils.parseBareAddress(chat.getParticipant()));
|
||||
parent.broadcastMessage(sender, "="+sender.getDisplayName()+": "+ message);
|
||||
parent.broadcastMessage(sender, "="+sender.getDisplayName()+": "+ message, StringUtils.parseBareAddress(chat.getParticipant()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
18
build.xml
18
build.xml
|
@ -5,24 +5,28 @@
|
|||
<replace dir="." includes="**/src/messages*.properties" token="version: TeamCity" value="version: ${build.number}"/>
|
||||
<replace dir="." includes="**/src/items.csv" token="version: TeamCity" value="version: ${build.number}"/>
|
||||
</target>
|
||||
<target name="buildall" depends="setversion">
|
||||
<target name="buildGM" depends="setversion">
|
||||
<ant dir="EssentialsGroupManager" antfile="build.xml"/>
|
||||
<ant dir="EssentialsGroupBridge" antfile="build.xml"/>
|
||||
</target>
|
||||
<target name="buildEss" depends="buildGM">
|
||||
<ant dir="Essentials" antfile="build.xml"/>
|
||||
</target>
|
||||
<target name="buildRest" depends="buildEss">
|
||||
<ant dir="EssentialsChat" antfile="build.xml"/>
|
||||
<ant dir="EssentialsSpawn" antfile="build.xml"/>
|
||||
<ant dir="EssentialsProtect" antfile="build.xml"/>
|
||||
<ant dir="EssentialsGroupManager" antfile="build.xml"/>
|
||||
<ant dir="EssentialsGroupBridge" antfile="build.xml"/>
|
||||
<ant dir="EssentialsGeoIP" antfile="build.xml"/>
|
||||
<ant dir="EssentialsXMPP" antfile="build.xml"/>
|
||||
</target>
|
||||
<target name="collect" depends="buildall">
|
||||
<target name="collect" depends="buildRest">
|
||||
<mkdir dir="jars"/>
|
||||
<copy todir="jars">
|
||||
<fileset dir=".">
|
||||
<include name="**/dist/Essentials*.jar"/>
|
||||
<include name="**/Essentials/src/config.yml" />
|
||||
<include name="**/src/messages*.properties" />
|
||||
<include name="**/src/items.csv" />
|
||||
<include name="**/Essentials/src/config.yml" />
|
||||
<include name="**/src/messages*.properties" />
|
||||
<include name="**/src/items.csv" />
|
||||
</fileset>
|
||||
<flattenmapper/>
|
||||
</copy>
|
||||
|
|
BIN
lib/PermissionsEx-javadoc.jar
Normal file
BIN
lib/PermissionsEx-javadoc.jar
Normal file
Binary file not shown.
Binary file not shown.
|
@ -10,3 +10,4 @@ libs.junit_4.javadoc=\
|
|||
${base}/junit_4/junit-4.5-api.zip
|
||||
libs.junit_4.src=\
|
||||
${base}/junit_4/junit-4.5-src.jar
|
||||
project.EssentialsGroupManager=../EssentialsGroupManager
|
||||
|
|
Loading…
Reference in a new issue