0

Initial commit

This commit is contained in:
Pepich
2017-02-01 11:48:49 +01:00
commit bf06c10772
15 changed files with 754 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
package com.redstoner.misc;
import org.bukkit.command.CommandSender;
import com.redstoner.annotations.Version;
/** Classes implementing this interface can be used to define a filter for the Utils.broadcast method for sending a message to more than one, but less than all users.
*
* @author Pepich */
@Version(major = 1, minor = 0, revision = 0, compatible = 1)
public interface BroadcastFilter
{
public boolean sendTo(CommandSender recipient);
}

View File

@@ -0,0 +1,35 @@
package com.redstoner.misc;
import org.bukkit.plugin.java.JavaPlugin;
import com.redstoner.annotations.Version;
import com.redstoner.coremods.ModuleLoader.ModuleLoader;
import com.redstoner.coremods.debugger.Debugger;
import com.redstoner.modules.adminchat.Adminchat;
import com.redstoner.modules.chatgroups.Chatgroups;
/** Main class. Duh.
*
* @author Pepich */
@Version(major = 1, minor = 0, revision = 0, compatible = -1)
public class Main extends JavaPlugin
{
public static JavaPlugin plugin;
@Override
public void onEnable()
{
plugin = this;
Debugger.init();
ModuleLoader.init();
// TODO: Add modules (this also loads them if necessary)
ModuleLoader.addModule(Adminchat.class, "Adminchat");
ModuleLoader.addModule(Chatgroups.class, "Chatrgoups");
// And enable them
ModuleLoader.enableModules();
}
@Override
public void onDisable()
{}
}

View File

@@ -0,0 +1,158 @@
package com.redstoner.misc;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.redstoner.annotations.Debugable;
import com.redstoner.annotations.Version;
import com.redstoner.coremods.debugger.Debugger;
import net.md_5.bungee.api.ChatColor;
/** The utils class containing utility functions. Those include but are not limited to sending formatted messages, broadcasts and more.
*
* @author Pepich */
@Version(major = 1, minor = 1, revision = 0, compatible = 1)
public final class Utils
{
/** Hidden constructor. Do not instantiate UTILS classes! :) */
private Utils()
{}
/** This will send a message to the specified recipient. It will generate the module prefix if you want it to.
*
* @param recipient Whom to sent the message to.
* @param prefix The prefix for the message. If null, the default prefix will be used: &8[&2MODULE&8]
* @param message The message to sent. Will default to &7 (light_grey) if not specified otherwise. */
@Debugable
public static void sendMessage(CommandSender recipient, String prefix, String message)
{
Debugger.notifyMethod(recipient, message, prefix);
if (prefix == null)
{
String classname = getCaller();
prefix = "§8[§2" + classname + "§8]: ";
}
recipient.sendMessage(prefix + "§7" + message);
}
/** This will send a message to the specified recipient. It will generate the module prefix if you want it to. Also, this will be logged to console as a warning.
*
* @param recipient Whom to sent the message to.
* @param prefix The prefix for the message. If null, the default prefix will be used: &8[&cMODULE&8]
* @param message The message to sent. Will default to &7 (light_grey) if not specified otherwise. */
@Debugable
public static void sendErrorMessage(CommandSender recipient, String prefix, String message)
{
Debugger.notifyMethod(recipient, prefix, message);
if (prefix == null)
{
String classname = getCaller();
prefix = "§8[§c" + classname + "§8]: ";
}
recipient.sendMessage(prefix + "§7" + message);
if (!recipient.equals(Bukkit.getConsoleSender()))
Bukkit.getConsoleSender().sendMessage("§c[WARN]: " + prefix + "§7" + message);
}
/** Invokes sendMessage. This method will additionally translate alternate color codes for you.
*
* @param recipient Whom to sent the message to.
* @param prefix The prefix for the message. If null, the default prefix will be used: &8[&cMODULE&8]
* @param message The message to sent. Will default to &7 (light_grey) if not specified otherwise.
* @param alternateColorCode The alternate color code indicator to use. If set to '&' then "&7" would be translated to "§7". Works with any char. */
public static void sendMessage(CommandSender recipient, String prefix, String message, char alternateColorCode)
{
sendMessage(recipient, ChatColor.translateAlternateColorCodes(alternateColorCode, prefix),
ChatColor.translateAlternateColorCodes(alternateColorCode, message));
}
/** Invokes sendErrorMessage. This method will additionally translate alternate color codes for you.
*
* @param recipient Whom to sent the message to.
* @param prefix The prefix for the message. If null, the default prefix will be used: &8[&cMODULE&8]
* @param message The message to sent. Will default to &7 (light_grey) if not specified otherwise.
* @param alternateColorCode The alternate color code indicator to use. If set to '&' then "&7" would be translated to "§7". Works with any char. */
public static void sendErrorMessage(CommandSender recipient, String prefix, String message, char alternateColorCode)
{
sendErrorMessage(recipient, ChatColor.translateAlternateColorCodes(alternateColorCode, prefix),
ChatColor.translateAlternateColorCodes(alternateColorCode, message));
}
/** @param message
* @param filter
* @return */
public static int broadcast(String prefix, String message, BroadcastFilter filter)
{
return broadcast(prefix, message, filter, null);
}
/** @param message
* @param filter
* @param log
* @return */
@Debugable
public static int broadcast(String prefix, String message, BroadcastFilter filter, String logmessage)
{
Debugger.notifyMethod(message, filter, logmessage);
if (logmessage != null)
sendMessage(Bukkit.getConsoleSender(), prefix,
logmessage + (filter == null ? " §7(global)" : " §7(filtered)"));
if (filter == null)
{
for (Player p : Bukkit.getOnlinePlayers())
p.sendMessage(message);
return Bukkit.getOnlinePlayers().size();
}
else
{
int count = 0;
for (Player p : Bukkit.getOnlinePlayers())
if (filter.sendTo(p))
{
p.sendMessage(message);
count++;
}
return count;
}
}
/** Used to make an info output to console. Supports &x color codes.
*
* @param message The message to be put into console. Prefixes are automatically generated. */
@Debugable
public static void log(String message)
{
Debugger.notifyMethod(message);
String classname = getCaller();
String prefix = "§8[§2" + classname + "§8]: ";
Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', prefix + "§7" + message));
}
/** Used to make an error output to console. Supports &x color codes.
*
* @param message The message to be put into console. Prefixes are automatically generated. Color defaults to red if not specified otherwise. */
@Debugable
public static void error(String message)
{
Debugger.notifyMethod(message);
String classname = getCaller();
String prefix = "§c[ERROR]: §8[§c" + classname + "§8]: ";
Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', prefix + "§7" + message));
}
/** This method will find the next parent caller and return their class name, omitting package names.
*
* @return */
private static final String getCaller()
{
StackTraceElement[] stackTrace = (new Exception()).getStackTrace();
String classname = "Utils";
for (int i = 0; classname.equals("Utils"); i++)
{
classname = stackTrace[i].getClassName().replaceAll(".*\\.", "");
}
return classname;
}
}

View File

@@ -0,0 +1,46 @@
package com.redstoner.misc;
import com.redstoner.annotations.Version;
import com.redstoner.exceptions.MissingVersionException;
/** This class can be used to compare modules against the loader version or against each other to prevent dependency issues.
*
* @author Pepich */
@Version(major = 1, minor = 0, revision = 0, compatible = -1)
public final class VersionHelper
{
private VersionHelper()
{}
/** Checks two modules versions for compatibility.
*
* @param base The base to compare to.
* @param module The module to compare.
* @return true, when the Major version of the base is bigger than the compatible version of the module, and the Version number of the base is smaller or equal to the Version number of the module.
* @throws MissingVersionException When one of the parameters is not annotated with a @Version annotation. */
public static boolean isCompatible(Class<?> base, Class<?> module) throws MissingVersionException
{
if (!base.isAnnotationPresent(Version.class))
throw new MissingVersionException("The base object is not annotated with a version.");
if (!module.isAnnotationPresent(Version.class))
throw new MissingVersionException("The module is not annotated with a version.");
Version baseVersion = base.getClass().getAnnotation(Version.class);
Version moduleVersion = module.getClass().getAnnotation(Version.class);
if (baseVersion.major() > moduleVersion.major())
return false;
return baseVersion.major() >= moduleVersion.compatible();
}
/** Returns the version of a given class as a String.
*
* @param clazz The class to grab the version number from.
* @return The version number of the class in format major.minor.revision.compatible.
* @throws MissingVersionException If the class is not annotated with @Version. */
public static String getVersion(Class<?> clazz) throws MissingVersionException
{
if (!clazz.isAnnotationPresent(Version.class))
throw new MissingVersionException("The given class is not associated with a version.");
Version ver = clazz.getAnnotation(Version.class);
return ver.major() + "." + ver.minor() + "." + ver.revision() + "." + ver.compatible();
}
}