{"id":9997,"date":"2024-05-22T16:36:12","date_gmt":"2024-05-22T14:36:12","guid":{"rendered":"https:\/\/store.algosyntax.com\/?post_type=asx-lms-tutorial-cpt&#038;p=9997"},"modified":"2026-03-09T12:29:37","modified_gmt":"2026-03-09T10:29:37","slug":"ue5-moving-content-and-classes-to-another-class","status":"publish","type":"asx-lms-tutorial-cpt","link":"https:\/\/store.algosyntax.com\/tutorials\/unreal-engine\/ue5-moving-content-and-classes-to-another-class\/","title":{"rendered":"Core Redirects In Unreal Engine"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"9997\" class=\"elementor elementor-9997\" data-elementor-post-type=\"asx-lms-tutorial-cpt\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cc0ef60 e-flex e-con-boxed e-con e-parent\" data-id=\"cc0ef60\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a5f7cb1 elementor-widget elementor-widget-text-editor\" data-id=\"a5f7cb1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Here&#8217;s how to rename a plugin, a module or move content and classes between two plugins without breaking your blueprints in unreal engine.<br \/>I usually write down anything that i spend more than 15 minutes trying to figure out. For this case i spent about an hour and almost rewrote my blueprints from scratch. I&#8217;m going to keep this short but it should help.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2771bf8 elementor-widget elementor-widget-heading\" data-id=\"2771bf8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">1. Move your content to the New Plugin<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-51407a7 elementor-widget elementor-widget-text-editor\" data-id=\"51407a7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>If you&#8217;re merging two plugins , you&#8217;ll want to move the content from the old\/source plugin to the new\/target plugin in the editor first. This is the easy way of doing this.<br \/>If you&#8217;re writing a script and automating this process, you can move the files and add CoreRedirect. More on this in the example config file below but it&#8217;s basically<br \/>\u00a0+PackageRedirects=(OldName=&#8221;\/OldPlugin\/&#8221;, NewName=&#8221;\/NewPlugin\/&#8221;, MatchSubstring=true).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f5d96d elementor-widget elementor-widget-heading\" data-id=\"4f5d96d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">2. Moving classes structs and enums between modules(plugins).<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2926fd0 elementor-widget elementor-widget-text-editor\" data-id=\"2926fd0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>This part is very important if you don&#8217;t want to break your blueprints.\u00a0<br \/>In your new \/ target plugin&#8217;s &#8220;Config&#8221; folder&#8230; create\/edit a file called &#8220;PluginName.ini&#8221;&#8230; eg if your plugin is called &#8220;CoolPlugin&#8221; you&#8217;ll want to edit\/create &#8220;CoolPlugin.ini&#8221;.<br \/>Then you&#8217;ll you&#8217;ll want to add [CoreRedirects] defining what changed and where to find it now.\u00a0<br \/>Example file:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-57f0075 elementor-widget elementor-widget-code-highlight\" data-id=\"57f0075\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>[CoreRedirects]\r\n+PackageRedirects=(OldName=\"\/MidiEngineRhythmTools\/\", NewName=\"\/MidiEngine\/\", MatchSubstring=true)\r\n+ClassRedirects=(OldName=\"RhythmJudgementBox\",NewName=\"\/Script\/AxMidiEngineCore.RhythmJudgementBox\")\r\n+ClassRedirects=(OldName=\"RhythmSectionComponent\",NewName=\"\/Script\/AxMidiEngineCore.RhythmSectionComponent\")\r\n+ClassRedirects=(OldName=\"RhythmInputInterface\",NewName=\"\/Script\/AxMidiEngineCore.RhythmInputInterface\")\r\n+ClassRedirects=(OldName=\"RhythmSectionInterface\",NewName=\"\/Script\/AxMidiEngineCore.RhythmSectionInterface\")\r\n\r\n\r\n\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9b61a34 elementor-widget elementor-widget-text-editor\" data-id=\"9b61a34\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>This is the core redirects i added when merging the MidiEngine Rhythm tools plugin into the Main MidiEngine Plugin.\u00a0<br \/>You can see that &#8220;NewName&#8221; for ClassRedirects includes the new Module Name, &#8220;AxMidiEngineCore&#8221; in its path.<\/p><p>Here is a link to read more on redirects: <a href=\"https:\/\/github.com\/EpicGames\/UnrealEngine\/blob\/release\/Engine\/Config\/BaseEngine.ini\" target=\"_blank\" rel=\"noopener\">CORE REDIRECTS IN UNREAL ENGINE<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b39b800 elementor-widget elementor-widget-heading\" data-id=\"b39b800\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Module redirect<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0f74848 elementor-widget elementor-widget-code-highlight\" data-id=\"0f74848\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>+ClassRedirects=(OldName=\"\/Script\/MidiEngine\",NewName=\"\/Script\/AxMidiEngineCore\",MatchSubstring=true)\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-86ab46c elementor-widget elementor-widget-text-editor\" data-id=\"86ab46c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>If you rename a module, you don&#8217;t have to make an entry for each class. the redirect looks like this:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0c12b29 elementor-widget elementor-widget-heading\" data-id=\"0c12b29\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">3. Save the Assets.<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-609d80f elementor-widget elementor-widget-text-editor\" data-id=\"609d80f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>In order to remove the Redirects in the config file, we need to save each asset that relies on the redirect. The &#8220;Save All&#8221; menu entry won&#8217;t work. You need to manually open each asset \/ select and right click then Save.\u00a0<br \/>When you do that, the asset will work without the [CoreRedirects] and you can now safely remove them.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"featured_media":0,"template":"","asx-lms-tutorial-categories":[45,55,50,58],"asx-lms-tutorial-tags":[46],"class_list":["post-9997","asx-lms-tutorial-cpt","type-asx-lms-tutorial-cpt","status-publish","hentry","asx-lms-tutorial-categories-unreal-engine","asx-lms-tutorial-categories-plugin-development","asx-lms-tutorial-categories-source-control","asx-lms-tutorial-categories-unreal-c-api","asx-lms-tutorial-tags-cpp","entry"],"acf":[],"_links":{"self":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-cpt\/9997","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-cpt"}],"about":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/types\/asx-lms-tutorial-cpt"}],"version-history":[{"count":2,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-cpt\/9997\/revisions"}],"predecessor-version":[{"id":12514,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-cpt\/9997\/revisions\/12514"}],"wp:attachment":[{"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/media?parent=9997"}],"wp:term":[{"taxonomy":"asx-lms-tutorial-categories","embeddable":true,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-categories?post=9997"},{"taxonomy":"asx-lms-tutorial-tags","embeddable":true,"href":"https:\/\/store.algosyntax.com\/asx-rest\/wp\/v2\/asx-lms-tutorial-tags?post=9997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}