Get rid of pointless code duplication.

This commit is contained in:
UnknownShadow200 2017-05-20 13:25:26 +10:00
parent 71d9e5def1
commit 9d66e40bef
7 changed files with 28 additions and 122 deletions

View File

@ -22,9 +22,6 @@ namespace MCGalaxy.Events {
/// <summary> Raised whenever a player's online money changes. </summary>
public sealed class OnMoneyChangedEvent : IPluginEvent<Economy.OnMoneyChanged> {
internal OnMoneyChangedEvent(Economy.OnMoneyChanged method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p));
@ -33,9 +30,6 @@ namespace MCGalaxy.Events {
/// <summary> Raised whenever an economic transaction occurs. </summary>
public sealed class OnEcoTransactionEvent : IPluginEvent<Economy.OnEcoTransaction> {
internal OnEcoTransactionEvent(Economy.OnEcoTransaction method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(EcoTransaction transaction) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(transaction));

View File

@ -21,10 +21,6 @@ using System.Collections.Generic;
namespace MCGalaxy.Events {
public sealed class OnGroupLoadedEvent : IPluginEvent<Group.GroupLoaded> {
internal OnGroupLoadedEvent(Group.GroupLoaded method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Group g) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(g));
@ -32,10 +28,6 @@ namespace MCGalaxy.Events {
}
public sealed class OnGroupLoadEvent : IPluginEvent<Group.GroupLoad> {
internal OnGroupLoadEvent(Group.GroupLoad method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call() {
if (handlers.Count == 0) return;
CallImpl(pl => pl());
@ -43,10 +35,6 @@ namespace MCGalaxy.Events {
}
public sealed class OnGroupSaveEvent : IPluginEvent<Group.GroupSave> {
internal OnGroupSaveEvent(Group.GroupSave method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call() {
if (handlers.Count == 0) return;
CallImpl(pl => pl());
@ -54,10 +42,6 @@ namespace MCGalaxy.Events {
}
public sealed class OnPlayerRankSetEvent : IPluginEvent<Group.RankSet> {
internal OnPlayerRankSetEvent(Group.RankSet method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, Group newRank) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, newRank));

View File

@ -23,15 +23,9 @@ namespace MCGalaxy.Events {
// This is because the static events are unique to each generic instantiation, not each subclass.
public class IPluginEvent<IMethod> {
protected internal static List<IPluginEvent<IMethod>> handlers = new List<IPluginEvent<IMethod>>();
protected internal Plugin plugin;
protected internal IMethod method;
protected internal Priority priority;
internal IPluginEvent(IMethod method, Priority priority, Plugin plugin) {
this.plugin = plugin;
this.priority = priority;
this.method = method;
}
protected Plugin plugin;
protected IMethod method;
protected Priority priority;
/// <summary> Register this event </summary>
/// <param name="method">This is the delegate that will get called when this event occurs</param>
@ -41,8 +35,11 @@ namespace MCGalaxy.Events {
public static void Register(IMethod method, Priority priority, Plugin plugin, bool bypass = false) {
if (Find(plugin) != null && !bypass)
throw new ArgumentException("The user tried to register 2 of the same event!");
handlers.Add(new IPluginEvent<IMethod>(method, priority, plugin));
Organize();
IPluginEvent<IMethod> handler = new IPluginEvent<IMethod>();
handler.plugin = plugin; handler.method = method; handler.priority = priority;
handlers.Add(handler);
SortHandlers();
}
/// <summary> UnRegister this event </summary>
@ -50,8 +47,8 @@ namespace MCGalaxy.Events {
public static void UnRegister(Plugin plugin) {
if (Find(plugin) == null)
throw new ArgumentException("This plugin doesnt have this event registered!");
else
handlers.Remove(Find(plugin));
handlers.Remove(Find(plugin));
}
public static IPluginEvent<IMethod> Find(Plugin plugin) {
@ -62,7 +59,7 @@ namespace MCGalaxy.Events {
}
protected static void Organize() {
protected static void SortHandlers() {
handlers.Sort((a, b) => b.priority.CompareTo(a.priority));
}

View File

@ -21,9 +21,6 @@ using MCGalaxy.Blocks.Physics;
namespace MCGalaxy.Events {
public sealed class OnLevelLoadedEvent : IPluginEvent<Level.OnLevelLoaded> {
internal OnLevelLoadedEvent(Level.OnLevelLoaded method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Level l) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(l));
@ -31,9 +28,6 @@ namespace MCGalaxy.Events {
}
public sealed class OnLevelLoadEvent : IPluginEvent<Level.OnLevelLoad> {
internal OnLevelLoadEvent(Level.OnLevelLoad method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(string name) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(name));
@ -41,9 +35,6 @@ namespace MCGalaxy.Events {
}
public sealed class OnLevelSaveEvent : IPluginEvent<Level.OnLevelSave> {
internal OnLevelSaveEvent(Level.OnLevelSave method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Level l) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(l));
@ -51,9 +42,6 @@ namespace MCGalaxy.Events {
}
public sealed class OnLevelUnloadEvent : IPluginEvent<Level.OnLevelUnload> {
internal OnLevelUnloadEvent(Level.OnLevelUnload method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Level l) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(l));
@ -61,10 +49,6 @@ namespace MCGalaxy.Events {
}
public sealed class OnPhysicsUpdateEvent : IPluginEvent<Level.OnPhysicsUpdate> {
internal OnPhysicsUpdateEvent(Level.OnPhysicsUpdate method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(ushort x, ushort y, ushort z, PhysicsArgs extraInfo, Level l) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(x, y, z, extraInfo, l));

View File

@ -126,9 +126,6 @@ namespace MCGalaxy.Events {
/// <summary> Raised when a moderation action occurs. </summary>
public sealed class OnModActionEvent : IPluginEvent<OnModAction> {
internal OnModActionEvent(OnModAction method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(ModAction e) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(e));

View File

@ -22,9 +22,6 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever a player chats on the server </summary>
public sealed class OnPlayerChatEvent : IPluginEvent<Player.OnPlayerChat> {
internal OnPlayerChatEvent(Player.OnPlayerChat method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, string message) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, message));
@ -33,9 +30,6 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever a player moves </summary>
public sealed class OnPlayerMoveEvent : IPluginEvent<Player.OnPlayerMove> {
internal OnPlayerMoveEvent(Player.OnPlayerMove method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, Position next, byte yaw, byte pitch) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, next, yaw, pitch));
@ -44,9 +38,6 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever the player goes AFK </summary>
public sealed class OnPlayerAFKEvent: IPluginEvent<Player.OnAFK > {
internal OnPlayerAFKEvent(Player.OnAFK method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p));
@ -55,9 +46,6 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever the server saves data to MySQL or SQLite </summary>
public sealed class OnMySQLSaveEvent : IPluginEvent<Player.OnMySQLSave> {
internal OnMySQLSaveEvent(Player.OnMySQLSave method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, string mysqlcommand) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, mysqlcommand));
@ -66,9 +54,6 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever a player uses a command </summary>
public sealed class OnPlayerCommandEvent : IPluginEvent<Player.OnPlayerCommand> {
internal OnPlayerCommandEvent(Player.OnPlayerCommand method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(string cmd, Player p, string message) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(cmd, p, message));
@ -77,9 +62,6 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever a player connects to the server </summary>
public sealed class OnPlayerConnectEvent: IPluginEvent<Player.OnPlayerConnect> {
internal OnPlayerConnectEvent(Player.OnPlayerConnect method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p));
@ -88,9 +70,6 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever a player tries connecting to the server </summary>
public sealed class OnPlayerConnectingEvent: IPluginEvent<Player.OnPlayerConnecting> {
internal OnPlayerConnectingEvent(Player.OnPlayerConnecting method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, string mppass) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, mppass));
@ -99,9 +78,6 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever a player dies in-game </summary>
public sealed class OnPlayerDeathEvent : IPluginEvent<Player.OnPlayerDeath> {
internal OnPlayerDeathEvent(Player.OnPlayerDeath method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, ExtBlock block) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, block));
@ -110,9 +86,6 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever a player connects to the server </summary>
public sealed class OnPlayerDisconnectEvent : IPluginEvent<Player.OnPlayerDisconnect> {
internal OnPlayerDisconnectEvent(Player.OnPlayerDisconnect method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, string reason) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, reason));
@ -121,9 +94,6 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever a player places or deletes a block </summary>
public sealed class OnBlockChangeEvent : IPluginEvent<Player.BlockchangeEventHandler> {
internal OnBlockChangeEvent(Player.BlockchangeEventHandler method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, ushort x, ushort y, ushort z, ExtBlock block) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, x, y, z, block));
@ -131,13 +101,9 @@ namespace MCGalaxy.Events {
}
/// <summary> This event is called whenever a player clicks their mouse </summary>
public sealed class OnPlayerClickEvent : IPluginEvent<Player.PlayerClickHandler>
{
internal OnPlayerClickEvent(Player.PlayerClickHandler method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, MouseButton button, MouseAction action, ushort yaw, ushort pitch, byte entity, ushort x, ushort y, ushort z, TargetBlockFace face)
{
public sealed class OnPlayerClickEvent : IPluginEvent<Player.PlayerClickHandler> {
public static void Call(Player p, MouseButton button, MouseAction action,
ushort yaw, ushort pitch, byte entity, ushort x, ushort y, ushort z, TargetBlockFace face) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, button, action, yaw,
pitch, entity, x, y, z, face));
@ -146,21 +112,14 @@ namespace MCGalaxy.Events {
/// <summary> This event is called whenever a player recieves a message from the server or from another player </summary>
public sealed class OnMessageRecieveEvent : IPluginEvent<Player.OnPlayerMessageReceived> {
internal OnMessageRecieveEvent(Player.OnPlayerMessageReceived method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, string message) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, message));
}
}
/// <summary> This event is called when a player has joined a level. </summary>
public sealed class OnJoinedLevelEvent : IPluginEvent<Player.JoinedLevel> {
internal OnJoinedLevelEvent(Player.JoinedLevel method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Player p, Level prevLevl, Level level) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(p, prevLevl, level));

View File

@ -21,9 +21,6 @@ using System.Collections.Generic;
namespace MCGalaxy.Events {
public sealed class OnConsoleCommandEvent : IPluginEvent<Server.OnConsoleCommand> {
internal OnConsoleCommandEvent(Server.OnConsoleCommand method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(string cmd, string message) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(cmd, message));
@ -31,9 +28,6 @@ namespace MCGalaxy.Events {
}
public sealed class OnServerErrorEvent : IPluginEvent<Server.OnServerError> {
internal OnServerErrorEvent(Server.OnServerError method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(Exception ex) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(ex));
@ -41,9 +35,6 @@ namespace MCGalaxy.Events {
}
public sealed class OnServerLogEvent : IPluginEvent<Server.OnServerLog> {
internal OnServerLogEvent(Server.OnServerLog method, Priority priority, Plugin plugin)
: base(method, priority, plugin) { }
public static void Call(string message) {
if (handlers.Count == 0) return;
CallImpl(pl => pl(message));