Beispiel #1
0
        private CodeMemberMethod CreateInitMethod()
        {
            CodeMemberMethod method = CreateEmptyEventHandler("init", "FMLInitializationEvent");

            method.Statements.Add(NewMethodInvokeType(SourceCodeLocator.Recipes(Modname, Organization).ClassName, "init"));
            return(method);
        }
Beispiel #2
0
        protected override void ForceJsonFileUpdate()
        {
            base.ForceJsonFileUpdate();
            McMod mcMod = SessionContext.SelectedMod;

            CodeGenerationService.RegenerateInitScript(SourceCodeLocator.SoundEvents(mcMod.ModInfo.Name, mcMod.Organization).ClassName, mcMod, Explorer.Folders.Files);
        }
Beispiel #3
0
        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"));
        }
Beispiel #4
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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));
        }
Beispiel #9
0
        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);
        }
Beispiel #11
0
        protected void RegenerateRecipes()
        {
            McMod mod = SessionContext.SelectedMod;

            CodeGenerationService.RegenerateInitScript(SourceCodeLocator.Recipes(mod.ModInfo.Name, mod.Organization).ClassName, mod, Explorer.Folders.Files[0].Files);
        }
Beispiel #12
0
 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);
        }