diff --git a/CorePlugin/ConnectHandler.cs b/CorePlugin/ConnectHandler.cs
new file mode 100644
index 000000000..414f36ff2
--- /dev/null
+++ b/CorePlugin/ConnectHandler.cs
@@ -0,0 +1,113 @@
+/*
+ Copyright 2015 MCGalaxy team
+
+ Dual-licensed under the Educational Community License, Version 2.0 and
+ the GNU General Public License, Version 3 (the "Licenses"); you may
+ not use this file except in compliance with the Licenses. You may
+ obtain a copy of the Licenses at
+
+ http://www.opensource.org/licenses/ecl2.php
+ http://www.gnu.org/licenses/gpl-3.0.html
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the Licenses are distributed on an "AS IS"
+ BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ or implied. See the Licenses for the specific language governing
+ permissions and limitations under the Licenses.
+ */
+using System;
+using System.IO;
+using MCGalaxy;
+
+namespace MCGalaxy.Core {
+
+ internal static class ConnectHandler {
+
+ internal static void HandleConnect(Player p) {
+ CheckReviewList(p);
+ if (p.group.commands.Contains("reachdistance"))
+ LoadReach(p);
+
+ LoadWaypoints(p);
+ LoadIgnores(p);
+ CheckOutdatedClient(p);
+ }
+
+ static void CheckReviewList(Player p) {
+ Command cmd = Command.all.Find("review");
+ int perm = CommandOtherPerms.GetPerm(cmd, 1);
+
+ if ((int)p.group.Permission < perm || !p.group.commands.Contains(cmd)) return;
+ int count = Server.reviewlist.Count;
+ if (count == 0) return;
+
+ string suffix = count == 1 ? " player is " : " players are ";
+ p.SendMessage(count + suffix + "waiting for a review. Type %T/review view");
+ }
+
+ static void LoadReach(Player p) {
+ string line = Server.reach.Find(p.name);
+ if (line == null) return;
+ int space = line.IndexOf(' ');
+ if (space == -1) return;
+ string reach = line.Substring(space + 1);
+
+ short reachDist;
+ if (!short.TryParse(reach, out reachDist)) return;
+ p.ReachDistance = reachDist / 32f;
+ if (p.HasCpeExt(CpeExt.ClickDistance))
+ p.Send(Packet.MakeClickDistance(reachDist));
+ }
+
+ static void LoadWaypoints(Player p) {
+ try {
+ p.Waypoints.Load(p);
+ } catch (IOException ex) {
+ p.SendMessage("Error loading waypoints.");
+ Server.ErrorLog(ex);
+ }
+ }
+
+ static void LoadIgnores(Player p) {
+ string path = "ranks/ignore/" + p.name + ".txt";
+ if (!File.Exists(path)) return;
+
+ try {
+ string[] lines = File.ReadAllLines(path);
+ foreach (string line in lines) {
+ if (line == "&global") continue; // deprecated /ignore global
+ if (line == "&all") p.ignoreAll = true;
+ else if (line == "&irc") p.ignoreIRC = true;
+ else if (line == "&titles") p.ignoreTitles = true;
+ else if (line == "&nicks") p.ignoreNicks = true;
+ else p.listignored.Add(line);
+ }
+ } catch (IOException ex) {
+ Server.ErrorLog(ex);
+ Server.s.Log("Failed to load ignore list for: " + p.name);
+ }
+
+ if (p.ignoreAll || p.ignoreIRC || p.ignoreTitles || p.ignoreNicks || p.listignored.Count > 0)
+ p.SendMessage("&cType &a/ignore list &cto see who you are still ignoring");
+ }
+
+ static void CheckOutdatedClient(Player p) {
+ if (p.appName == null || !p.appName.StartsWith("ClassicalSharp ")) return;
+ int spaceIndex = p.appName.IndexOf(' ');
+ string version = p.appName.Substring(spaceIndex, p.appName.Length - spaceIndex);
+ Version ver;
+ try {
+ ver = new Version(version);
+ } catch {
+ return;
+ }
+
+ if (ver < new Version("0.98.6")) {
+ p.SendMessage("%aYou are using an outdated version of ClassicalSharp.");
+ p.SendMessage("%aYou can click %eCheck for updates %ain the launcher to update. " +
+ "(make sure to close the client first)");
+ p.outdatedClient = true;
+ }
+ }
+ }
+}
diff --git a/CorePlugin/CorePlugin.cs b/CorePlugin/CorePlugin.cs
new file mode 100644
index 000000000..4638cba43
--- /dev/null
+++ b/CorePlugin/CorePlugin.cs
@@ -0,0 +1,37 @@
+/*
+ Copyright 2015 MCGalaxy team
+
+ Dual-licensed under the Educational Community License, Version 2.0 and
+ the GNU General Public License, Version 3 (the "Licenses"); you may
+ not use this file except in compliance with the Licenses. You may
+ obtain a copy of the Licenses at
+
+ http://www.opensource.org/licenses/ecl2.php
+ http://www.gnu.org/licenses/gpl-3.0.html
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the Licenses are distributed on an "AS IS"
+ BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ or implied. See the Licenses for the specific language governing
+ permissions and limitations under the Licenses.
+*/
+using System.Collections.Generic;
+using System.IO;
+
+namespace MCGalaxy.Core {
+
+ public sealed class CorePlugin : Plugin_Simple {
+ public override string creator { get { return "MCGalaxy team"; } }
+ public override string MCGalaxy_Version { get { return Server.VersionString; } }
+ public override string name { get { return "CorePlugin"; } }
+
+ public override void Load(bool startup) {
+ OnPlayerConnectEvent.Register(ConnectHandler.HandleConnect,
+ Priority.System_Level, this, false);
+ }
+
+ public override void Unload(bool shutdown) {
+ OnPlayerConnectEvent.UnRegister(this);
+ }
+ }
+}
diff --git a/MCGalaxy_.csproj b/MCGalaxy_.csproj
index bf6253416..ef910318f 100644
--- a/MCGalaxy_.csproj
+++ b/MCGalaxy_.csproj
@@ -406,6 +406,8 @@
+
+
@@ -722,6 +724,7 @@
+
diff --git a/Player/Player.Login.cs b/Player/Player.Login.cs
index 73edc2161..76b9de8dd 100644
--- a/Player/Player.Login.cs
+++ b/Player/Player.Login.cs
@@ -116,7 +116,6 @@ namespace MCGalaxy {
}
}
- LoadIgnores();
byte type = packet[130];
if (type == 0x42) { hasCpe = true; SendCpeExtensions(); }
@@ -228,7 +227,6 @@ namespace MCGalaxy {
Server.s.Log(alts);
}
}
- CheckOutdatedClient();
} catch (Exception e) {
Server.ErrorLog(e);
Chat.MessageAll("An error occurred: {0}", e.Message);
@@ -284,9 +282,6 @@ namespace MCGalaxy {
OnPlayerConnectEvent.Call(this);
CheckLoginJailed();
- CheckReviewList();
- if (group.commands.Contains("reachdistance"))
- CheckLoginReach();
if (Server.agreetorulesonentry && group.Permission == LevelPermission.Guest && !Server.agreed.Contains(name)) {
SendMessage("&9You must read the &c/rules&9 and &c/agree&9 to them before you can build and use commands!");
@@ -299,13 +294,6 @@ namespace MCGalaxy {
else
SendMessage("&cPlease complete admin verification with &a/pass [Password]!");
}
-
- try {
- Waypoints.Load(this);
- } catch (Exception ex) {
- SendMessage("Error loading waypoints!");
- Server.ErrorLog(ex);
- }
Server.s.Log(name + " [" + ip + "] has joined the server.");
Game.InfectMessages = PlayerDB.GetInfectMessages(this);
@@ -324,18 +312,6 @@ namespace MCGalaxy {
Loading = false;
}
- void CheckReviewList() {
- Command cmd = Command.all.Find("review");
- int perm = CommandOtherPerms.GetPerm(cmd, 1);
-
- if ((int)group.Permission < perm || !group.commands.Contains(cmd)) return;
- int count = Server.reviewlist.Count;
- if (count == 0) return;
-
- string suffix = count == 1 ? " player is " : " players are ";
- SendMessage(count + suffix + "waiting for a review. Type %T/review view");
- }
-
void LoadCpeData() {
string line = Server.skins.Find(name);
if (line != null) {
@@ -350,25 +326,6 @@ namespace MCGalaxy {
}
}
- void CheckOutdatedClient() {
- if (appName == null || !appName.StartsWith("ClassicalSharp ")) return;
- int spaceIndex = appName.IndexOf(' ');
- string version = appName.Substring(spaceIndex, appName.Length - spaceIndex);
- Version ver;
- try {
- ver = new Version(version);
- } catch {
- return;
- }
-
- if (ver < new Version("0.98.6")) {
- SendMessage("%aYou are using an outdated version of ClassicalSharp.");
- SendMessage("%aYou can click %eCheck for updates %ain the launcher to update. " +
- "(make sure to close the client first)");
- outdatedClient = true;
- }
- }
-
void InitPlayerStats(DataTable playerDb) {
SendMessage("Welcome " + DisplayName + "! This is your first visit.");
PlayerData.Create(this);
@@ -408,19 +365,5 @@ namespace MCGalaxy {
Server.ErrorLog(ex);
}
}
-
- void CheckLoginReach() {
- string line = Server.reach.Find(name);
- if (line == null) return;
- int space = line.IndexOf(' ');
- if (space == -1) return;
- string reach = line.Substring(space + 1);
-
- short reachDist;
- if (!short.TryParse(reach, out reachDist)) return;
- ReachDistance = reachDist / 32f;
- if (HasCpeExt(CpeExt.ClickDistance))
- Send(Packet.MakeClickDistance(reachDist));
- }
}
}
diff --git a/Player/Player.cs b/Player/Player.cs
index 0ca08bd0b..0df753a80 100644
--- a/Player/Player.cs
+++ b/Player/Player.cs
@@ -537,30 +537,7 @@ namespace MCGalaxy {
Server.s.Log("Failed to save ignored list for player: " + name);
}
}
-
- void LoadIgnores() {
- string path = "ranks/ignore/" + name + ".txt";
- if (!File.Exists(path)) return;
-
- try {
- string[] lines = File.ReadAllLines(path);
- foreach (string line in lines) {
- if (line == "&global") continue; // deprecated /ignore global
- if (line == "&all") ignoreAll = true;
- else if (line == "&irc") ignoreIRC = true;
- else if (line == "&titles") ignoreTitles = true;
- else if (line == "&nicks") ignoreNicks = true;
- else listignored.Add(line);
- }
- } catch (Exception ex) {
- Server.ErrorLog(ex);
- Server.s.Log("Failed to load ignore list for: " + name);
- }
-
- if (ignoreAll || ignoreIRC || ignoreTitles || ignoreNicks || listignored.Count > 0)
- SendMessage("&cType &a/ignore list &cto see who you are still ignoring");
- }
-
+
internal void RemoveInvalidUndos() {
UndoDrawOpEntry[] items = DrawOps.Items;
for (int i = 0; i < items.Length; i++) {
diff --git a/Plugins/PluginManager.cs b/Plugins/PluginManager.cs
index 7f606d669..55ae15f53 100644
--- a/Plugins/PluginManager.cs
+++ b/Plugins/PluginManager.cs
@@ -20,6 +20,7 @@ using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Threading;
+using MCGalaxy.Core;
namespace MCGalaxy {
/// This class provides for more advanced modification to MCGalaxy
@@ -120,6 +121,8 @@ namespace MCGalaxy {
/// Load all plugins
public static void Load() {
+ LoadInternalPlugins();
+
if (Directory.Exists("plugins")) {
foreach (string path in Directory.GetFiles("plugins", "*.dll")) {
string name = Path.GetFileNameWithoutExtension(path);
@@ -128,12 +131,16 @@ namespace MCGalaxy {
} else {
Directory.CreateDirectory("plugins");
}
+ }
+
+ static void LoadInternalPlugins() {
+ CTF.Setup ctf = new CTF.Setup();
+ ctf.Load(true);
+ Plugin.all.Add(ctf);
- // Load Internal Plugins
- CTF.Setup temp = new CTF.Setup();
- temp.Load(true);
- Plugin.all.Add(temp);
+ CorePlugin core = new CorePlugin();
+ core.Load(true);
+ Plugin.all.Add(core);
}
}
-}
-
+}
\ No newline at end of file