MCGalaxy icon indicating copy to clipboard operation
MCGalaxy copied to clipboard

fCraft mapgen options extension

Open rdebath opened this issue 1 year ago • 0 comments

This patch no longer applies; maybe you'd like to include it as you're changing that area. (I'm not using it myself at the moment)

Extend seed for fcraft generator

Comma separated options, the first is the biome as before.
Any values comes after an '='.

seed=123        Random integer seed (s)
water           Bool/disable water (w)
watercoverage   Set the water coverage 0.00-1.00 (wc)
tree            Enable/disable trees (t)
snow            Bool to enable/disable snow (sn)
snowlevel       Enable snow and set it's starting level (sl,snowaltitude)

treespacingmin
treespacingmax  How often are trees
treeheightmin
treeheightmax   How big are trees.
diff --git a/MCGalaxy/Generator/fCraft/MapGen.cs b/MCGalaxy/Generator/fCraft/MapGen.cs
index d68aee365..0e9ec207b 100644
--- a/MCGalaxy/Generator/fCraft/MapGen.cs
+++ b/MCGalaxy/Generator/fCraft/MapGen.cs
@@ -418,22 +418,100 @@ namespace MCGalaxy.Generator.fCraft {

         static bool Gen(Player p, Level lvl, string seed, MapGenTheme theme) {
             MapGenBiome biome = MapGenBiome.Forest;
-            if (seed.Length > 0 && !CommandParser.GetEnum(p, seed, "Seed", ref biome)) return false;
             fCraftMapGenArgs args = fCraftMapGenArgs.MakeTemplate(theme);

             float ratio = lvl.Height / 96.0f;
             args.MaxHeight    = (int)Math.Round(args.MaxHeight    * ratio);
             args.MaxDepth     = (int)Math.Round(args.MaxDepth     * ratio);
             args.SnowAltitude = (int)Math.Round(args.SnowAltitude * ratio);
-
+            args.WaterLevel = (lvl.Height - 1) / 2;
+
+            string[] seedparts = seed.Split(',');
+            if (seedparts.Length>1)
+                seed = seedparts[0];
+            if (seed.Length > 0 && !CommandParser.GetEnum(p, seed, "Biome", ref biome)) return false;
+
             args.Biome      = biome;
             args.AddTrees   = biome == MapGenBiome.Forest;
             args.AddWater   = biome != MapGenBiome.Desert;
-            args.WaterLevel = (lvl.Height - 1) / 2;
+
+            int ar;
+            char[] equals_chararray = new char[] {'='};
+            for(ar=1; ar<seedparts.Length; ar++)
+            {
+                string[] arg = (seedparts[ar]).Split(equals_chararray,2);
+                if (arg.Length != 2) arg = new string[2]{arg[0], "1"};
+                switch(arg[0].ToLower()) {
+                case "s":
+                case "seed":
+                    if (!Int32.TryParse(arg[1], out args.Seed)) {
+                        p.Message("&W\"{0}\" is not a valid integer Seed.", arg[1]);
+                        return false;
+                    }
+                    break;
+                case "w":
+                case "water":
+                    if (!CommandParser.GetBool(p, arg[1], ref args.AddWater))
+                        return false;
+                    break;
+                case "wc":
+                case "watercoverage":
+                    if (!CommandParser.GetReal(p, arg[1], "WaterCoverage", ref args.WaterCoverage, 0.0f, 1.0f))
+                    args.AddWater = true;
+                    args.MatchWaterCoverage = true;
+                    break;
+                case "t":
+                case "tree": case "trees":
+                    if (!CommandParser.GetBool(p, arg[1], ref args.AddTrees))
+                        return false;
+                    break;
+                case "sn":
+                case "snow":
+                    if (!CommandParser.GetBool(p, arg[1], ref args.AddSnow))
+                        return false;
+                    break;
+                case "sl":
+                case "snowlevel":
+                case "snowaltitude":
+                    if (!CommandParser.GetInt(p, arg[1], "SnowAltitude", ref args.SnowAltitude, 0, lvl.Height - 1))
+                        return false;
+                    args.AddSnow = true;
+                    break;
+
+                case "tsl":
+                case "treespacingmin":
+                    if (!CommandParser.GetInt(p, arg[1], "TreeSpacingMin", ref args.TreeSpacingMin, 0))
+                        return false;
+                    args.AddTrees = true;
+                    break;
+                case "tsh":
+                case "treespacingmax":
+                    if (!CommandParser.GetInt(p, arg[1], "TreeSpacingMax", ref args.TreeSpacingMax, 0))
+                        return false;
+                    args.AddTrees = true;
+                    break;
+                case "thl":
+                case "treeheightmin":
+                    if (!CommandParser.GetInt(p, arg[1], "TreeHeightMin", ref args.TreeHeightMin, 0))
+                        return false;
+                    args.AddTrees = true;
+                    break;
+                case "thh":
+                case "treeheightmax":
+                    if (!CommandParser.GetInt(p, arg[1], "TreeHeightMax", ref args.TreeHeightMax, 0))
+                        return false;
+                    args.AddTrees = true;
+                    break;
+
+                default:
+                    p.Message("&WSeed option\"{0}\" is unknown.", arg[0]);
+                    return false;
+                }
+            }

             new fCraftMapGen(args).Generate(lvl);
             args.ApplyEnv(lvl.Config);
             return true;
         }
     }
-}
\ No newline at end of file
+}

rdebath avatar Dec 21 '22 22:12 rdebath