Files
txtgen/Program.cs
T

171 lines
5.2 KiB
C#

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
namespace txtgen;
public class Program
{
// string blockname;
static string ctm_dir;
static string texture_dir;
static void Main()
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.CursorVisible = true;
// Dedupe, sort alphabetically once for consistent display
var blocks = AutoComplete.FullBlocks.Distinct().OrderBy(b => b).ToList();
// Console.WriteLine("Minecraft 26.2 (Chaos Cubed) — Full Block Picker");
// Console.WriteLine("Type to filter, Up/Down to move, Tab/Enter to accept, Esc to cancel.");
Console.WriteLine();
string chosen = AutoComplete.AutoCompletePrompt("Block Name: ", blocks);
Console.WriteLine();
if (chosen == null)
return;
// else
// Console.WriteLine($"You selected: {chosen}");
// Console.Write("Block Name(diamon_ore): ");
string blockname = chosen;
if (string.IsNullOrEmpty(blockname))
{
blockname = "diamond_ore";
}
if (Directory.Exists("output/assets/minecraft/optifine/ctm/" + blockname))
{
Console.WriteLine("this block already exists in the texturepack delete it and try again");
return;
}
Create_pack(blockname);
// Console.Write("top texture url: ");
// string top_texture = Console.ReadLine().Trim('\"');
// Console.Write("bottom texture url: ");
// string bottom_texture = Console.ReadLine().Trim('\"');
Console.Write("full texture path: ");
string full_texture = Console.ReadLine().Trim('\"');
Console.Write("none texture path: ");
string none_texture = Console.ReadLine().Trim('\"');
Image full_img = Image.Load(full_texture);
Image none_img = Image.Load(none_texture);
Image bottom_img = Image.Load(full_texture);
Image top_img = Image.Load(none_texture);
int size = full_img.Height;
bottom_img.Mutate(x => x.DrawImage(none_img, new Rectangle(0, 0, size, size / 2), 1f));
top_img.Mutate(x => x.DrawImage(full_img, new Rectangle(0, 0, size, size / 2), 1f));
// g.Save();
if (Directory.Exists("tmp"))
{
Directory.Delete("tmp", true);
}
Directory.CreateDirectory("tmp");
bottom_img.Save("tmp/bottom.png");
top_img.Save("tmp/top.png");
string top_texture = "tmp/top.png";
string bottom_texture = "tmp/bottom.png";
Add_block(blockname, top_texture, bottom_texture, full_texture, none_texture);
Directory.Delete("tmp", true);
// string blockname = "blockname";
// Directory.CreateDirectory(working_dir + "/output/assets/minecraft");
// Directory.CreateDirectory(working_dir + "/output/assets/minecraft/optifine");
// Directory.CreateDirectory(working_dir + "/output/assets/minecraft/optifine/ctm");
}
static void Add_block(string blockname, string top_texture, string bottom_texture, string full_texture, string none_texture)
{
string ctmproperties = @"matchTiles=" + blockname + @"
method=ctm
tiles=0-47";
File.WriteAllText(ctm_dir + "/" + blockname + ".properties", ctmproperties);
File.Copy(full_texture, texture_dir + "/" + blockname + ".png");
// old one
// int[] top = { 4, 5, 7, 12, 13, 14, 15, 29, 31 };
// int[] bottom = { 16, 17, 18, 36, 37, 38, 39, 40, 42 };
// int[] both = { 0, 1, 2, 3 };
// int[] none = { 6, 8, 9, 10, 11, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 41, 43, 44, 45, 46 };
int[] top = { 4, 5, 7, 12, 13, 14, 15,28, 29, 31 };
int[] bottom = { 16, 17, 18,36, 37, 38, 39, 40, 42 };
int[] both = { 0, 1, 2, 3 };
int[] none = { 6, 8, 9, 10, 11, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 32, 33, 34, 35, 41,43, 44, 45, 46 };
foreach (int i in top)
{
File.Copy(top_texture, ctm_dir + "/" + i + ".png");
}
foreach (int i in bottom)
{
File.Copy(bottom_texture, ctm_dir + "/" + i + ".png");
}
foreach (int i in both)
{
File.Copy(full_texture, ctm_dir + "/" + i + ".png");
}
foreach (int i in none)
{
File.Copy(none_texture, ctm_dir + "/" + i + ".png");
}
}
static void Create_pack(string blockname)
{
string working_dir = Directory.GetCurrentDirectory();
string pack_Name = "output";
ctm_dir = Path.Combine(working_dir,pack_Name, "assets/minecraft/optifine/ctm/" + blockname);
texture_dir = Path.Combine(working_dir,pack_Name, "assets/minecraft/textures/block/");
Directory.CreateDirectory(ctm_dir);
Directory.CreateDirectory(texture_dir);
// Directory.CreateDirectory(working_dir + "/1output/assets");
string mcmeta = @"{
""pack"": {
""description"": """",
""pack_format"": 15,
""min_format"": [15, 0],
""max_format"": [1000, 0],
""supported_formats"": [15, 1000]
}
}";
File.WriteAllText(Path.Combine(working_dir, pack_Name, "pack.mcmeta"), mcmeta);
}
}