namespace WeaveLoader.API.Block; public enum MaterialType { Air = 0, Stone = 1, Wood = 2, Cloth = 3, Plant = 4, Dirt = 5, Sand = 6, Glass = 7, Water = 8, Lava = 9, Ice = 10, Metal = 11, Snow = 12, Clay = 13, Explosive = 14, Web = 15 } public enum SoundType { None = 0, Stone = 1, Wood = 2, Gravel = 3, Grass = 4, Metal = 5, Glass = 6, Cloth = 7, Sand = 8, Snow = 9 } /// /// Fluent builder for defining block properties. /// public class BlockProperties { internal MaterialType MaterialValue = MaterialType.Stone; internal float HardnessValue = 1.0f; internal float ResistanceValue = 5.0f; internal SoundType SoundValue = SoundType.Stone; internal string IconValue = "stone"; internal float LightEmissionValue = 0.0f; internal int LightBlockValue = 255; internal CreativeTab CreativeTabValue = CreativeTab.None; internal string? NameValue; public BlockProperties Material(MaterialType material) { MaterialValue = material; return this; } public BlockProperties Hardness(float hardness) { HardnessValue = hardness; return this; } public BlockProperties Resistance(float resistance) { ResistanceValue = resistance; return this; } public BlockProperties Sound(SoundType sound) { SoundValue = sound; return this; } /// Icon name in the terrain atlas. Use namespaced ID for mod textures (e.g. "examplemod:ruby_ore" from assets/blocks/ruby_ore.png), or vanilla names like "stone", "gold_ore". public BlockProperties Icon(string iconName) { IconValue = iconName; return this; } public BlockProperties LightLevel(float level) { LightEmissionValue = level; return this; } public BlockProperties LightBlocking(int level) { LightBlockValue = level; return this; } public BlockProperties Indestructible() { HardnessValue = -1.0f; ResistanceValue = 6000000f; return this; } public BlockProperties InCreativeTab(CreativeTab tab) { CreativeTabValue = tab; return this; } /// Display name shown in-game (e.g. "Ruby Ore"). Used for localization. public BlockProperties Name(string displayName) { NameValue = displayName; return this; } }