Allow EnvPreset to be useable by plugins + minor code cleanup

This commit is contained in:
Goodlyay 2024-06-07 10:27:07 -07:00
parent 80884967e2
commit 0872171cbb
2 changed files with 38 additions and 30 deletions

View File

@ -16,7 +16,6 @@
permissions and limitations under the Licenses.
*/
using System;
using System.IO;
namespace MCGalaxy.Commands.CPE
{
@ -29,7 +28,7 @@ namespace MCGalaxy.Commands.CPE
public override void Use(Player p, string message, CommandData data) {
if (message.CaselessEq("preset")) {
MessagePresets(p); return;
ExplainPresets(p); return;
}
Level lvl = null;
@ -59,8 +58,8 @@ namespace MCGalaxy.Commands.CPE
internal static bool Handle(Player p, Level lvl, string type, string value, EnvConfig cfg, string area) {
if (type.CaselessEq("preset")) {
EnvPreset preset = FindPreset(value);
if (preset == null) { MessagePresets(p); return false; }
EnvPreset preset = EnvPreset.Find(value);
if (preset == null) { ExplainPresets(p); return false; }
cfg.SkyColor = preset.Sky;
cfg.CloudColor = preset.Clouds;
@ -96,27 +95,10 @@ namespace MCGalaxy.Commands.CPE
pl.SendCurrentEnv();
}
}
static EnvPreset FindPreset(string value) {
EnvPreset preset = EnvPreset.Find(value);
if (preset != null) return preset;
if (File.Exists("presets/" + value.ToLower() + ".env")) {
string text = File.ReadAllText("presets/" + value.ToLower() + ".env");
return new EnvPreset(text);
}
return null;
}
static void MessagePresets(Player p) {
static void ExplainPresets(Player p) {
p.Message("&T/Env preset [type] &H- Applies an env preset on the map");
p.Message("&HPresets: &f{0}", EnvPreset.Presets.Join(pr => pr.Key));
string[] files = AtomicIO.TryGetFiles("presets", "*.env");
if (files == null) return;
string all = files.Join(f => Path.GetFileNameWithoutExtension(f));
if (all.Length > 0) p.Message("&HCustom presets: &f" + all);
EnvPreset.ListFor(p);
}
public override void Help(Player p) {
@ -133,7 +115,7 @@ namespace MCGalaxy.Commands.CPE
p.Message("&HUse &T/Help env [variable] &Hto see details for that variable");
return;
} else if (message.CaselessEq("presets")) {
MessagePresets(p); return;
ExplainPresets(p); return;
}
EnvOption opt = EnvOptions.Find(message);

View File

@ -17,11 +17,16 @@
*/
using System;
using System.Collections.Generic;
using System.IO;
namespace MCGalaxy {
internal sealed class EnvPreset {
public string Fog, Sky, Clouds, Sun, Shadow;
public string LavaLight = "", LampLight = "";
public sealed class EnvPreset {
const string FOLDER = "presets";
const string FILE_EXTENSION = ".env";
public readonly string Fog, Sky, Clouds, Sun, Shadow;
public readonly string LavaLight = "", LampLight = "";
public EnvPreset(string raw) {
string[] args = raw.SplitSpaces();
@ -30,7 +35,7 @@ namespace MCGalaxy {
LampLight = args.Length > 6 ? args[6] : "";
}
public static Dictionary<string, string> Presets = new Dictionary<string, string>() {
static Dictionary<string, string> Presets = new Dictionary<string, string>() {
// fog sky clouds sun shadow
{ "Cartoon", "00FFFF 1E90FF 00BFFF F5DEB3 F4A460" },
{ "Noir", "000000 1F1F1F 000000 696969 1F1F1F" },
@ -43,12 +48,33 @@ namespace MCGalaxy {
{ "Midnight", "131947 070A23 1E223A 181828 0F0F19" },
{ "Normal", " " },
};
public static EnvPreset Find(string name) {
public static EnvPreset Find(string value) {
EnvPreset preset = FindDefault(value);
if (preset != null) return preset;
if (File.Exists(FOLDER + "/" + value.ToLower() + FILE_EXTENSION)) {
string text = File.ReadAllText(FOLDER + "/" + value.ToLower() + FILE_EXTENSION);
return new EnvPreset(text);
}
return null;
}
static EnvPreset FindDefault(string name) {
foreach (var kvp in Presets) {
if (kvp.Key.CaselessEq(name)) return new EnvPreset(kvp.Value);
}
return null;
}
public static void ListFor(Player p) {
p.Message("&HPresets: &f{0}", Presets.Join(pr => pr.Key));
string[] files = AtomicIO.TryGetFiles(FOLDER, "*" + FILE_EXTENSION);
if (files == null) return;
string all = files.Join(f => Path.GetFileNameWithoutExtension(f));
if (all.Length > 0) p.Message("&HCustom presets: &f" + all);
}
}
}