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
3 minutes ago, diesieben07 said:

You make an instance of FolderResourcePack and then put it into Minecraft::defaultResourcePacks on startup.

How would i go about performing the latter. Ive got a new FolderResourcePack pain ting to my root folder.

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)
13 minutes ago, diesieben07 said:

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

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
20 minutes ago, 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.

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
1 minute ago, 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?

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
27 minutes ago, 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.

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
1 minute ago, 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.

 

 

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
Just now, 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.

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
Just now, diesieben07 said:

So... a resource pack? Why can they not use a normal resource pack?

because in the custom block I'm creating, it will have its own gui to allow the player to play sounds and do all these things, not just replace the base minecraft ones.

Posted
Just now, 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.

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.

Posted
Just now, diesieben07 said:

You use it like any other resource. Resources in that folder will behave as if they were part of your mod, part of the Minecraft assets or part of an active resource pack.

so i just use something like:

new ResourceLocation("ModAssets", nameOfFile)

 

Posted
6 minutes ago, diesieben07 said:

That would point at assets/ModAssets/<nameOfFile> inside the ModAssets directory. 

I can't seem to get it to look in the custom resource file, It just keep looking in the resources for the mod.

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.