Jump to content

Recommended Posts

Posted

Ive just started modding again since 1.6.4 and I'm trying to figure out how i would go about reading a file and loading assets from an external locations such as another file in the mods folder.

Ive seen a few posts saying that you need to either create a class that implements IResourceManager or to use FolderResourcePack to set a folder as a default resource pack location.

From my understanding, the FolderResourcePack should be ideal as i am following the normal minecraft resource layout of Directory/assets/modid/textures.. etc.

 

Im just not sure where to start with using FolderResourcePack as I've always been used to just using standard directories as the mods never used to be packaged.

 

Could anyone show me a barebones way of doing this or point me in the right direction.

 

Thanks

Posted
  On 2/8/2017 at 10:56 PM, TheMCJavaFre4k said:

Minecraft::defaultResourcePacks

Expand  
 

In the Minecraft class.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Posted (edited)

In 1.10 at least, Minecraft::defaultResourcePacks is private, last I checked, so he'll need to use Reflection to get it, add his own IResourcePack instance (the FolderResourcePack) and then, most importantly, refresh the resources with Minecraft::refreshResources.

I'm doing it prior to block initialization, but could be done just prior to model initialization.

Edited by Matryoshika

Also previously known as eAndPi.

"Pi, is there a station coming up where we can board your train of thought?" -Kronnn

Published Mods: Underworld

Handy links: Vic_'s Forge events Own WIP Tutorials.

Posted (edited)
  On 2/8/2017 at 11:34 PM, diesieben07 said:

You don't need to refresh resources if you do it in preInit.

Expand  

Huh, that's odd... I was doing it during the RegistryEvent.Register<Block> event. Shouldn't that still work then, as it's been added before preInit? As your statement infers that Minecraft::refreshResources is called at the end/after preInit.

Edited by Matryoshika

Also previously known as eAndPi.

"Pi, is there a station coming up where we can board your train of thought?" -Kronnn

Published Mods: Underworld

Handy links: Vic_'s Forge events Own WIP Tutorials.

Posted
  On 2/8/2017 at 11:26 PM, Matryoshika said:

In 1.10 at least, Minecraft::defaultResourcePacks is private, last I checked, so he'll need to use Reflection to get it, add his own IResourcePack instance (the FolderResourcePack) and then, most importantly, refresh the resources with Minecraft::refreshResources.

I'm doing it prior to block initialization, but could be done just prior to model initialization.

Expand  

I'm totally lost now. So ill look into reflection as i haven't used the technique before and have no clue what to do unless i know it by a different name. And if I'm using IResourcePack now, how do i specify the root folder?

Posted
  On 2/8/2017 at 11:49 PM, TheMCJavaFre4k said:

I'm totally lost now. So ill look into reflection as i haven't used the technique before and have no clue what to do unless i know it by a different name. And if I'm using IResourcePack now, how do i specify the root folder?

Expand  

No, stay with FolderResourcePack. It implements IResourcePack, which is what the list contains.

Create a List<IResourcePack>, in a method in your client proxy (name the method registerResourcepack or whatever) and initialize it to null.


I recommend you try either FieldUtils from Apache Commons Lang3 (already packed with Forge) or ReflectionHelper, which originates from Forge directly, and I've heard it is the best alternative with all of the obfuscation/deobfuscation/obfuscation happening.
The two things I just mentioned are great tools to help you get fields (and more) that are private, or final, or really, "untouchable". Reflections really just "unlocks" the wanted thing, if it exists, though it is more demanding on resources compared to just getting a normal field.

Also previously known as eAndPi.

"Pi, is there a station coming up where we can board your train of thought?" -Kronnn

Published Mods: Underworld

Handy links: Vic_'s Forge events Own WIP Tutorials.

Posted
  On 2/9/2017 at 12:01 AM, Matryoshika said:

No, stay with FolderResourcePack. It implements IResourcePack, which is what the list contains.

Create a List<IResourcePack>, in a method in your client proxy (name the method registerResourcepack or whatever) and initialize it to null.


I recommend you try either FieldUtils from Apache Commons Lang3 (already packed with Forge) or ReflectionHelper, which originates from Forge directly, and I've heard it is the best alternative with all of the obfuscation/deobfuscation/obfuscation happening.
The two things I just mentioned are great tools to help you get fields (and more) that are private, or final, or really, "untouchable". Reflections really just "unlocks" the wanted thing, if it exists, though it is more demanding on resources compared to just getting a normal field.

Expand  

I think I've got more of an understanding now. What i have so far:

public void registerResources(){
 
  List<IResourcePack> defaultResourcePacks = null;
  
  defaultResourcePacks = ReflectionHelper.getPrivateValue(Minecraft.class, Minecraft.getMinecraft(), "defaultResourcePacks");
  
  defaultResourcePacks.add(new FolderResourcePack(new File("/mods")));
  
}

 Im not sure if this is working because I'm not entirely sure how to use this now to load an asset.

Posted
  On 2/9/2017 at 12:32 AM, diesieben07 said:

Why are you adding the mods folder as a resource pack? I am starting to question this whole ordeal, why are you trying to do this? You will also need to add the SRG name (using MCPBot) for the field, or you mod will not work outside of the development environment.

 

 

Expand  

Well i was using the mods folder back in 1.6.4 as the assets because the mod could be run as a folder and thats just the code i was following. I will probably move it to a seperate file if i know it works.

Posted
  On 2/9/2017 at 12:46 AM, diesieben07 said:

Uhm, what? "Mod as a folder" is a terrible idea and as far as I know FML will not even allow it anymore.

That has not answered the question for an additional resource pack though.

Expand  

I was using just a folder but i can't anymore hence why I'm stuck at the moment. Im wanting people to be able to dump images and sounds into a file within .minecraft then in game can use custom blocks to either play the sounds or use the textures etc.

Posted
  On 2/9/2017 at 1:03 AM, diesieben07 said:

They could still use a normal resource pack for that. And even then, the mods folder is a terrible place for that. Do it in a specialized folder.

Expand  

so I've got it pointed to another folder called ModAssets within the .minecraft folder and within that i have the standard file system of assets/modid/sounds etc.. but how do i then use this new FolderResourcePack in a resource location?

 

Im trying to eliminate the need for people to head into the resource pack option and choose the mod one just for simplicity.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.