private CodeMemberMethod CreateInitMethod() { CodeMemberMethod method = CreateEmptyEventHandler("init", "FMLInitializationEvent"); method.Statements.Add(NewMethodInvokeType(SourceCodeLocator.Recipes(Modname, Organization).ClassName, "init")); return(method); }
protected override void ForceJsonFileUpdate() { base.ForceJsonFileUpdate(); McMod mcMod = SessionContext.SelectedMod; CodeGenerationService.RegenerateInitScript(SourceCodeLocator.SoundEvents(mcMod.ModInfo.Name, mcMod.Organization).ClassName, mcMod, Explorer.Folders.Files); }
protected override CodeCompileUnit CreateTargetCodeUnit() { CodeTypeDeclaration clas = NewClassWithMembers(SourceCodeLocator.RegistryHandler(Modname, Organization).ClassName, GetRegisterMethod(SourceCodeLocator.Items(Modname, Organization).ClassName, SourceCodeLocator.Items(Modname, Organization).InitFieldName, "Item"), GetRegisterMethod(SourceCodeLocator.Blocks(Modname, Organization).ClassName, SourceCodeLocator.Blocks(Modname, Organization).InitFieldName, "Block"), GetRegisterMethod(SourceCodeLocator.SoundEvents(Modname, Organization).ClassName, SourceCodeLocator.SoundEvents(Modname, Organization).InitFieldName, "SoundEvent")); clas.CustomAttributes.Add(NewEventBusSubscriberAnnotation()); CodeMemberMethod modelRegister = NewMethod("onModelRegister", typeof(void).FullName, MemberAttributes.Public | JavaAttributes.StaticOnly, new Parameter("ModelRegistryEvent", "event")); modelRegister.CustomAttributes.Add(NewSubscribeEventAnnotation()); modelRegister.Statements.Add(CreateRegisterModelForeach(SourceCodeLocator.Items(Modname, Organization).ClassName, "Item")); modelRegister.Statements.Add(CreateRegisterModelForeach(SourceCodeLocator.Blocks(Modname, Organization).ClassName, "Block")); clas.Members.Add(modelRegister); return(NewCodeUnit(SourceCodeLocator.RegistryHandler(Modname, Organization).PackageName, clas, $"{SourceRootPackageName}.{SourceCodeLocator.Blocks(Modname, Organization).ImportRelativeName}", $"{SourceRootPackageName}.{SourceCodeLocator.Items(Modname, Organization).ImportRelativeName}", $"{SourceRootPackageName}.{SourceCodeLocator.SoundEvents(Modname, Organization).ImportRelativeName}", $"{SourceRootPackageName}.{SourceCodeLocator.ModelInterface(Modname, Organization).ImportRelativeName}", "net.minecraft.block.Block", "net.minecraft.item.Item", "net.minecraft.util.SoundEvent", "net.minecraftforge.client.event.ModelRegistryEvent", "net.minecraftforge.event.RegistryEvent", "net.minecraftforge.fml.common.Mod.EventBusSubscriber", "net.minecraftforge.fml.common.eventhandler.SubscribeEvent")); }
protected override CodeCompileUnit CreateTargetCodeUnit() { CodeCompileUnit unit = CreateDefaultTargetCodeUnit(ScriptLocator.ClassName, "SoundEvent"); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.SoundEventBase(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.util.SoundEvent")); return(unit); }
private void InitializeStatics(IContainerRegistry containerRegistry) { NLogLoggerFactory fac = new NLogLoggerFactory(); Log.Initialize(containerRegistry.GetContainer().Resolve <DialogService>(), fac.CreateLogger("ErrorLog"), fac.CreateLogger("InfoLog")); fac.Dispose(); SourceCodeLocator.Initialize(globalCache); }
private CodeForeachStatement CreateRegisterModelForeach(string className, string registerType) { CodeForeachStatement loop = new CodeForeachStatement(NewVariable(registerType, registerType.ToLower()), NewFieldReferenceType(className, $"{registerType.ToUpper()}S")); CodeMethodInvokeExpression registerModels = NewMethodInvokeVar($"(({SourceCodeLocator.ModelInterface(Modname, Organization).ClassName}) {registerType.ToLower()})", "registerModels"); CodeConditionStatement ifStatement = new CodeConditionStatement( new CodeSnippetExpression($"{registerType.ToLower()} instanceof {SourceCodeLocator.ModelInterface(Modname, Organization).ClassName}"), new CodeExpressionStatement(registerModels) ); loop.Statements.Add(ifStatement); return(loop); }
protected override CodeCompileUnit CreateTargetCodeUnit() { CodeTypeDeclaration managerClass = NewClassWithMembers(SourceCodeLocator.Manager(Modname, Organization).ClassName); string hook = SourceCodeLocator.Hook(Modname, Organization).ClassName; managerClass.CustomAttributes.Add(NewAnnotation("Mod", NewAnnotationArg("modid", NewFieldReferenceType(hook, "MODID")), NewAnnotationArg("name", NewFieldReferenceType(hook, "NAME")), NewAnnotationArg("version", NewFieldReferenceType(hook, "VERSION")), NewAnnotationArg("acceptedMinecraftVersions", NewFieldReferenceType(hook, "ACCEPTEDVERSIONS")) )); CodeMemberField instanceField = NewField(SourceCodeLocator.Manager(Modname, Organization).ClassName, "instance", MemberAttributes.Private | JavaAttributes.StaticOnly); instanceField.CustomAttributes.Add(NewInstanceAnnotation()); managerClass.Members.Add(instanceField); CodeMemberField proxyField = NewField(SourceCodeLocator.CommonProxyInterface(Modname, Organization).ClassName, "proxy", MemberAttributes.Private | JavaAttributes.StaticOnly); proxyField.CustomAttributes.Add(NewAnnotation("SidedProxy", NewAnnotationArg("clientSide", NewFieldReferenceType(hook, "CLIENTPROXYCLASS")), NewAnnotationArg("serverSide", NewFieldReferenceType(hook, "SERVERPROXYCLASS")) )); managerClass.Members.Add(proxyField); managerClass.Members.Add(NewField("Logger", "logger", MemberAttributes.Private | JavaAttributes.StaticOnly)); managerClass.Members.Add(CretePreInitMethod()); managerClass.Members.Add(CreateInitMethod()); managerClass.Members.Add(CreateEmptyEventHandler("postInit", "FMLPostInitializationEvent")); managerClass.Members.Add(CreateEmptyEventHandler("serverStart", "FMLServerStartingEvent")); CodeMemberMethod getProxyMethod = NewMethod("getProxy", SourceCodeLocator.CommonProxyInterface(Modname, Organization).ClassName, MemberAttributes.Public | JavaAttributes.StaticOnly); getProxyMethod.Statements.Add(NewReturnVar("proxy")); managerClass.Members.Add(getProxyMethod); return(NewCodeUnit(SourceCodeLocator.Manager(Modname, Organization).PackageName, managerClass, "net.minecraftforge.fml.common.Mod", "net.minecraftforge.fml.common.SidedProxy", "net.minecraftforge.fml.common.Mod.EventHandler", "net.minecraftforge.fml.common.Mod.Instance", "net.minecraftforge.fml.common.event.FMLInitializationEvent", "net.minecraftforge.fml.common.event.FMLPostInitializationEvent", "net.minecraftforge.fml.common.event.FMLPreInitializationEvent", "net.minecraftforge.fml.common.event.FMLServerStartingEvent", $"{SourceRootPackageName}.{SourceCodeLocator.Recipes(Modname, Organization).ImportRelativeName}", $"{SourceRootPackageName}.{SourceCodeLocator.CommonProxyInterface(Modname, Organization).ImportRelativeName}", "org.apache.logging.log4j.Logger")); }
protected override CodeCompileUnit CreateTargetCodeUnit() { CodeTypeDeclaration clas = NewClassWithMembers(ScriptLocator.ClassName); clas.Members.Add(GetCreativeTab()); CodeNamespace package = NewPackage(SourceCodeLocator.CreativeTab(Modname, Organization).PackageName, clas, $"{SourceRootPackageName}.{SourceCodeLocator.Items(Modname, Organization).ImportRelativeName}", "net.minecraft.creativetab.CreativeTabs", "net.minecraft.item.ItemStack", "net.minecraftforge.fml.relauncher.Side", "net.minecraftforge.fml.relauncher.SideOnly"); return(NewCodeUnit(package)); }
protected override CodeCompileUnit CreateTargetCodeUnit() { CodeTypeDeclaration clas = NewClassWithMembers(ScriptLocator.ClassName); CodeMemberMethod registerAll = NewMethod("registerAll", typeof(void).FullName, MemberAttributes.Public | MemberAttributes.Static, new Parameter("FMLServerStartingEvent", "event")); CodeNamespace package = NewPackage(ScriptLocator.PackageName, clas, "net.minecraftforge.fml.common.event.FMLServerStartingEvent"); foreach (Command element in Elements) { CodeMethodInvokeExpression register = NewMethodInvokeVar("event", "registerServerCommand", NewObject(GetElementName(element))); registerAll.Statements.Add(register); package.Imports.Add(NewImport(SourceCodeLocator.CustomCommand(Modname, Organization, element.ClassName).ImportFullName)); } clas.Members.Add(registerAll); return(NewCodeUnit(package)); }
private CodeMemberField GetCreativeTab() { CodeMemberField field = new CodeMemberField("CreativeTabs", "MODCEATIVETAB") { Attributes = MemberAttributes.Public | MemberAttributes.Static | MemberAttributes.Final, }; field.InitExpression = new CodeSnippetExpression( $"new CreativeTabs(\"{Modname}\") {{" + @" @SideOnly(Side.CLIENT) @Override public ItemStack getTabIconItem() {" + $"{System.Environment.NewLine} return new ItemStack({SourceCodeLocator.Items(Modname, Organization).ClassName}.MODLOGO, 1);"+ @" } @SideOnly(Side.CLIENT) @Override public boolean hasSearchBar() { return true; } }" ); return(field); }
protected void RegenerateRecipes() { McMod mod = SessionContext.SelectedMod; CodeGenerationService.RegenerateInitScript(SourceCodeLocator.Recipes(mod.ModInfo.Name, mod.Organization).ClassName, mod, Explorer.Folders.Files[0].Files); }
protected override CodeCompileUnit CreateTargetCodeUnit() => NewCodeUnit(SourceCodeLocator.ModelInterface(Modname, Organization).PackageName, NewInterface(SourceCodeLocator.ModelInterface(Modname, Organization).ClassName, NewMethod("registerModels", typeof(void).FullName, MemberAttributes.Public)));
protected override CodeCompileUnit CreateTargetCodeUnit() { CodeCompileUnit unit = CreateDefaultTargetCodeUnit(ScriptLocator.ClassName, "Item"); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.ItemBase(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.Materials(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.Hook(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.ItemBase(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.ArmorBase(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.BowBase(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.AxeBase(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.HoeBase(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.PickaxeBase(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.SpadeBase(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"{SourceRootPackageName}.{SourceCodeLocator.SwordBase(Modname, Organization).ImportRelativeName}")); unit.Namespaces[0].Imports.Add(NewImport($"java.util.ArrayList")); unit.Namespaces[0].Imports.Add(NewImport($"java.util.List")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.item.Item")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.item.Item.ToolMaterial")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.item.ItemArmor.ArmorMaterial")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.block.material.Material")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.init.SoundEvents")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.inventory.EntityEquipmentSlot")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.item.Item")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.item.ItemAxe")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.item.ItemHoe")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.item.ItemPickaxe")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.item.ItemSpade")); unit.Namespaces[0].Imports.Add(NewImport($"net.minecraft.item.ItemSword")); unit.Namespaces[0].Types[0].Members.Add(NewFieldGlobal("Item", "MODLOGO", NewObject("ItemBase", NewPrimitive("modlogo")))); foreach (Item item in Elements) { string newObjectType = $"{item.Type.ToString()}Base"; string baseObjectType = null; List <CodeExpression> arguments = new List <CodeExpression>(2) { NewPrimitive(item.Name.ToLower()) }; switch (item.Type) { case ItemType.Item: baseObjectType = "Item"; arguments.Add(NewPrimitive(item.StackSize)); break; case ItemType.Hoe: baseObjectType = "ItemHoe"; arguments.Add(NewPrimitive(item.Material)); break; case ItemType.Axe: baseObjectType = "ItemAxe"; arguments.Add(NewPrimitive(item.Material)); break; case ItemType.Sword: baseObjectType = "ItemSword"; arguments.Add(NewPrimitive(item.Material)); break; case ItemType.Spade: baseObjectType = "ItemSpade"; arguments.Add(NewPrimitive(item.Material)); break; case ItemType.Pickaxe: baseObjectType = "ItemPickaxe"; arguments.Add(NewPrimitive(item.Material)); break; case ItemType.Armor: baseObjectType = "Item"; arguments.Add(NewPrimitive(item.Material)); switch (item.ArmorType) { case ArmorType.Helmet: arguments.Add(NewPrimitive(1)); arguments.Add(NewSnippetExpression("EntityEquipmentSlot.HEAD")); break; case ArmorType.Chestplate: arguments.Add(NewPrimitive(1)); arguments.Add(NewSnippetExpression("EntityEquipmentSlot.CHEST")); break; case ArmorType.Leggings: arguments.Add(NewPrimitive(2)); arguments.Add(NewSnippetExpression("EntityEquipmentSlot.LEGS")); break; case ArmorType.Boots: arguments.Add(NewPrimitive(1)); arguments.Add(NewSnippetExpression("EntityEquipmentSlot.FEET")); break; default: throw new NotImplementedException($"{item.ArmorType} was not implemented"); } break; default: throw new NotImplementedException($"{item.Type} was not implemented"); } CodeMemberField field = NewFieldGlobal(baseObjectType, item.Name.ToUpper(), NewObject(newObjectType, arguments.ToArray())); unit.Namespaces[0].Types[0].Members.Add(field); string jsonPath = Path.Combine(ModPaths.ModelsItemFolder(McMod.ModInfo.Name, McMod.Modid), item.Name.ToLower() + ".json"); string parent = item.Type == ItemType.Armor ? "generated" : "handheld"; string jsonText = $@" {{ ""parent"": ""item/{parent}"", ""textures"": {{ ""layer0"": ""{McMod.Modid}:{item.TextureName}"" }} }} "; // TODO: Do not hard-code json File.WriteAllText(jsonPath, jsonText); } return(unit); }