Jump to content
  • Home
  • Files
  • Docs
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • How to retrieve the size of a model part
The update for 1.13 is being worked on - please be patient. (Updated 02/19/19)
1.13 Update Notes for Mod Creators
Sign in to follow this  
Followers 2
GiantNuker

How to retrieve the size of a model part

Started by GiantNuker, August 24, 2018

8 posts in this topic

GiantNuker    2

GiantNuker

GiantNuker    2

  • Creeper Killer
  • GiantNuker
  • Members
  • 2
  • 139 posts
  • Report post
Posted August 24, 2018

I am trying to build off of iChun's Mob Dismemberment mod, so it can include any mob, and I am running into a few problems.

 

First off, I need to know how big a model box is when rendered, because of sizing problems. For instance, Ghasts models are enlarged a ton and I end up with this when i kill them.2018-08-23_17_45_41.png.6299b51f706c2a6ec0d3031763aeb514.png

The same thing happens to bats, but in reverse:

2018-08-23_17_46_50.png.bf0169b07abf5cdbfe113b66fcf207d5.png

Once i know this, I can resize each body part correctly.

I also need to know the size so I can fi the bounding box. Currently, it does this:

2018-08-23_17_50_52.png.16c4365c0f242712af7b08d10947c7e2.png

If its possible to do, please tell me how. It might not be though, which is why iChun disallowed child mobs in the first place.

Thanks.

 

I have access to each piece's ModelRenderer, if that helps.

Share this post


Link to post
Share on other sites

Cadiboo    145

Cadiboo

Cadiboo    145

  • World Shaper
  • Cadiboo
  • Members
  • 145
  • 2127 posts
  • Report post
Posted August 24, 2018
4 hours ago, GiantNuker said:

I am trying to build off of iChun's Mob Dismemberment mod, so it can include any mob, and I am running into a few problems.

 

First off, I need to know how big a model box is when rendered, because of sizing problems. For instance, Ghasts models are enlarged a ton and I end up with this when i kill them.2018-08-23_17_45_41.png.6299b51f706c2a6ec0d3031763aeb514.png

The same thing happens to bats, but in reverse:

2018-08-23_17_46_50.png.bf0169b07abf5cdbfe113b66fcf207d5.png

Once i know this, I can resize each body part correctly.

I also need to know the size so I can fi the bounding box. Currently, it does this:

2018-08-23_17_50_52.png.16c4365c0f242712af7b08d10947c7e2.png

If its possible to do, please tell me how. It might not be though, which is why iChun disallowed child mobs in the first place.

Thanks.

 

I have access to each piece's ModelRenderer, if that helps.

Look at / keep track of calls to GLStatemanager.scale()?

Share this post


Link to post
Share on other sites

GiantNuker    2

GiantNuker

GiantNuker    2

  • Creeper Killer
  • GiantNuker
  • Members
  • 2
  • 139 posts
  • Report post
Posted August 24, 2018 (edited)
11 hours ago, Cadiboo said:

Look at / keep track of calls to GLStatemanager.scale()?

And how would I do this? I would have to catalog values for each entity, and the whole point is to be compatible with other mods. Is there any way I could catalog these values inside the mod? Mabe I could get the readings from The body part render code?

Model:

Spoiler

public class ModelGib extends ModelBase
{
    @Override
    public void render(Entity ent, float f, float f1, float f2, float f3, float f4, float f5)
    {
        setRotationAngles(f, f1, f2, f3, f4, f5, ent);

        if(ent instanceof EntityGib)
        {
            EntityGib gib = (EntityGib)ent;
            gib.renderBox.render(f5);
        }
    }

    @Override
    public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity ent)
    {
        
    }
}

gib.renderBox is the body part to be rendered's model, gotten like this:


public void spawnGibs(World world, EntityLivingBase entity, Entity explo) {
    	RenderManager rmanager = Minecraft.getMinecraft().getRenderManager();
        Render<Entity> entityRender = rmanager.getEntityRenderObject(entity);
        if (entityRender instanceof RenderLivingBase) { // It should be!
        	RenderLivingBase render = (RenderLivingBase) entityRender;
        	ModelBase model = render.getMainModel();
	        List<ModelRenderer> boxes = model.boxList;
	        	List<ModelRenderer> cancelBoxes = new ArrayList();
		        for (ModelRenderer box : boxes) {
		        	if (box.childModels != null)
			        	for (ModelRenderer r : box.childModels) {
			        		cancelBoxes.add(r); // Without this, it renders child models and parent models and turns into a huge mess
			        	}
		        }
	        	
	        	for (ModelRenderer box : boxes) {
	        		if (cancelBoxes.contains(box)) continue;
	        		if (box.isHidden || !box.showModel) continue;
	        		world.spawnEntity(new EntityGib(world, entity, box, explo));
	        	}
        }
    }

 

Renderer:

Spoiler

public class RenderGib extends Render<EntityGib>
{
    public ModelGib modelGib;

    public RenderGib(RenderManager manager)
    {
        super(manager);
        modelGib = new ModelGib();
    }

    @Override
    protected ResourceLocation getEntityTexture(EntityGib gib)
    {
        Render render = Minecraft.getMinecraft().getRenderManager().getEntityRenderObject(gib.parent);
        return ObfHelper.getEntityTexture(render, render.getClass(), gib.parent);
    }

    @Override
    public void doRender(EntityGib gib, double par2, double par4, double par6, float par8, float par9)
    {
        GlStateManager.disableCull();
        GlStateManager.pushMatrix();
        bindEntityTexture(gib);
        GlStateManager.enableBlend();
        GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        GlStateManager.color(1.0F, 1.0F, 1.0F, MathHelper.clamp(gib.groundTime >= MobDismemberment.config.gibGroundTime ? 1.0F - (gib.groundTime - MobDismemberment.config.gibGroundTime + par9) / 20F : 1.0F, 0F, 1F));
        GlStateManager.alphaFunc(GL11.GL_GREATER, 0.003921569F);

        GlStateManager.translate(par2, par4, par6);

        //GlStateManager.translate(0.0F, gib.type == 0 ? 4F / 16F : gib.type <= 2 && gib.parent instanceof EntitySkeleton ? 1F / 16F : 2F / 16F, 0.0F);

        GlStateManager.rotate(EntityHelper.interpolateRotation(gib.prevRotationYaw, gib.rotationYaw, par9), 0.0F, 1.0F, 0.0F);
        GlStateManager.rotate(EntityHelper.interpolateRotation(gib.prevRotationPitch, gib.rotationPitch, par9), -1.0F, 0.0F, 0.0F);

        GlStateManager.translate(0.0F, 24F / 16F - gib.height * 0.5F, 0.0F);

        GlStateManager.scale(-1.0F, -1.0F, 1.0F);

        modelGib.render(gib, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);

        GlStateManager.alphaFunc(GL11.GL_GREATER, 0.1F);
        GlStateManager.disableBlend();
        GlStateManager.popMatrix();
        GlStateManager.enableCull();
    }

    public static class RenderFactory implements IRenderFactory<EntityGib>
    {
        @Override
        public Render<? super EntityGib> createRenderFor(RenderManager manager)
        {
            return new RenderGib(manager);
        }
    }
}

Something in here would probably help, but this is just iChun's base code, I'm not sure what to do with it.

 

Edited August 24, 2018 by GiantNuker
spelling

Share this post


Link to post
Share on other sites

jabelar    584

jabelar

jabelar    584

  • Reality Controller
  • jabelar
  • Members
  • 584
  • 3266 posts
  • Report post
Posted August 24, 2018

Well, if you just want to do vanilla mobs, it might just be worth the time to go through and get all the values manually. There aren't THAT many mobs. In programming it is good to do things algorithmically but there is also no shame in brute force when the resulting set of values is small and fixed. 

 

Anyway, just saying you can spend an hour or two and get it done manually, or spend days banging your head on the programming. 

Share this post


Link to post
Share on other sites

GiantNuker    2

GiantNuker

GiantNuker    2

  • Creeper Killer
  • GiantNuker
  • Members
  • 2
  • 139 posts
  • Report post
Posted August 24, 2018
20 minutes ago, jabelar said:

Well, if you just want to do vanilla mobs, it might just be worth the time to go through and get all the values manually. There aren't THAT many mobs. In programming it is good to do things algorithmically but there is also no shame in brute force when the resulting set of values is small and fixed. 

 

Anyway, just saying you can spend an hour or two and get it done manually, or spend days banging your head on the programming. 

I would, but the point is for it to work with other mods.

Share this post


Link to post
Share on other sites

Cadiboo    145

Cadiboo

Cadiboo    145

  • World Shaper
  • Cadiboo
  • Members
  • 145
  • 2127 posts
  • Report post
Posted August 26, 2018
On 8/25/2018 at 4:45 AM, GiantNuker said:

I would, but the point is for it to work with other mods.

 

On 8/24/2018 at 3:06 PM, Cadiboo said:

Look at / keep track of calls to GLStatemanager.scale()?

So whats wrong with this, its going to be a painful amount of reflection & possibly a core mod, but it will allow you to make a dynamic map of entity->scale.

On 8/25/2018 at 4:24 AM, jabelar said:

Anyway, just saying you can spend an hour or two and get it done manually, or spend days banging your head on the programming.

 

Share this post


Link to post
Share on other sites

jabelar    584

jabelar

jabelar    584

  • Reality Controller
  • jabelar
  • Members
  • 584
  • 3266 posts
  • Report post
Posted August 26, 2018

Even with other mods, you can still cover it manually at least for the most popular mods or ones you get a request for. I think your main problem is the scaling right? So even if there was mods that added 100 mobs, that isn't really that much. And most are probably default, so you can simply code in the exceptions. And you could just allow the scale to be wrong for mods that you haven't got around to supporting. 

 

Your main problem is that technically you can't predict where the scaling in mods might be added. It could be done right in the renderer, but could also be done in the model, or in pre-render callback or in a render event. You can't even use reflection mentioned above because you can't reflect into other mods especially if you are trying to make it generic for mods you don't even know about.

 

The only other solution I could suggest, and it would still be a fair bit of work but quite possible to do, is to create a configuration GUI where people can adjust the part scaling for the mobs for any mod they have installed. Basically, your configuration would create a map of scaling factors against all the installed mods' entities. You could manually code the default for any mods you want to support explicitly, but you could also allow the user to tweak them and also user can set them for mods that you haven't coded in directly.

  • Like 1

Share this post


Link to post
Share on other sites

GiantNuker    2

GiantNuker

GiantNuker    2

  • Creeper Killer
  • GiantNuker
  • Members
  • 2
  • 139 posts
  • Report post
Posted August 26, 2018
10 hours ago, jabelar said:

Even with other mods, you can still cover it manually at least for the most popular mods or ones you get a request for. I think your main problem is the scaling right? So even if there was mods that added 100 mobs, that isn't really that much. And most are probably default, so you can simply code in the exceptions. And you could just allow the scale to be wrong for mods that you haven't got around to supporting. 

 

Your main problem is that technically you can't predict where the scaling in mods might be added. It could be done right in the renderer, but could also be done in the model, or in pre-render callback or in a render event. You can't even use reflection mentioned above because you can't reflect into other mods especially if you are trying to make it generic for mods you don't even know about.

 

The only other solution I could suggest, and it would still be a fair bit of work but quite possible to do, is to create a configuration GUI where people can adjust the part scaling for the mobs for any mod they have installed. Basically, your configuration would create a map of scaling factors against all the installed mods' entities. You could manually code the default for any mods you want to support explicitly, but you could also allow the user to tweak them and also user can set them for mods that you haven't coded in directly.

This seems like the best solution

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  
Followers 2
Go To Topic Listing Modder Support

  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Pkbldr
      Trouble Updating Forge

      By Pkbldr · Posted 11 minutes ago

    • DaemonUmbra
      I am not able to run the forge installer

      By DaemonUmbra · Posted 12 minutes ago

      That is not a log, that is a screenshot of the error window.
    • DaemonUmbra
      Trouble Updating Forge

      By DaemonUmbra · Posted 14 minutes ago

      That installer log looks incomplete, can you show a screenshot of your launcher?
    • Pkbldr
      Trouble Updating Forge

      By Pkbldr · Posted 18 minutes ago

      I'm trying to install forge-1.12.2-14.23.5.2768-installer-win over .2.2611. It downloads fine, runs fine, says "Successfully installed.....into launcher. Does NOT show up in the launcher. Log attached. Any help very much appreciated installer.log
    • Frick
      Game crash upon startup

      By Frick · Posted 18 minutes ago

      ive been trying to mod version 1.12.2 for a little bit, but when i start up the game i get this error: 
      The game crashed whilst unexpected error
      Error: java.lang.IllegalStateException: Display not created _______________________________________________________________________________ Full crash report:  ---- Minecraft Crash Report ----
      // On the bright side, I bought you a teddy bear! Time: 2/21/19 2:15 PM
      Description: Unexpected error java.lang.IllegalStateException: Display not created
          at org.lwjgl.opengl.Display.processMessages(Display.java:598)
          at net.minecraftforge.fml.client.FMLClientHandler.processWindowMessages(FMLClientHandler.java:1039)
          at net.minecraftforge.fml.common.FMLCommonHandler.processWindowMessages(FMLCommonHandler.java:660)
          at net.minecraftforge.fml.common.ProgressManager.push(ProgressManager.java:55)
          at net.minecraftforge.fml.common.ProgressManager.push(ProgressManager.java:41)
          at net.minecraft.client.resources.SimpleReloadableResourceManager.func_110542_a(SimpleReloadableResourceManager.java:118)
          at net.minecraftforge.client.CloudRenderer.<init>(CloudRenderer.java:82)
          at net.minecraftforge.fml.client.FMLClientHandler.getCloudRenderer(FMLClientHandler.java:1099)
          at net.minecraftforge.fml.client.FMLClientHandler.updateCloudSettings(FMLClientHandler.java:1105)
          at net.minecraftforge.common.ForgeInternalHandler.checkSettings(ForgeInternalHandler.java:97)
          at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_6_ForgeInternalHandler_checkSettings_ClientTickEvent.invoke(.dynamic)
          at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
          at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182)
          at net.minecraftforge.fml.common.FMLCommonHandler.onPostClientTick(FMLCommonHandler.java:349)
          at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:1910)
          at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1097)
          at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:397)
          at net.minecraft.client.main.Main.main(SourceFile:123)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:497)
          at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
          at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
      A detailed walkthrough of the error, its code path and all known details is as follows:
      --------------------------------------------------------------------------------------- -- System Details --
      Details:
          Minecraft Version: 1.12.2
          Operating System: Windows 10 (amd64) version 10.0
          Java Version: 1.8.0_51, Oracle Corporation
          Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
          Memory: 270715224 bytes (258 MB) / 805306368 bytes (768 MB) up to 2147483648 bytes (2048 MB)
          JVM Flags: 8 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx2G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M
          IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
          FML: MCP 9.42 Powered by Forge 14.23.5.2768 4 mods loaded, 4 mods active
          States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored     | State  | ID        | Version      | Source                        | Signature                                |
          |:------ |:--------- |:------------ |:----------------------------- |:---------------------------------------- |
          | UCHIJA | minecraft | 1.12.2       | minecraft.jar                 | None                                     |
          | UCHIJA | mcp       | 9.42         | minecraft.jar                 | None                                     |
          | UCHIJA | FML       | 8.0.99.99    | forge-1.12.2-14.23.5.2768.jar | e3c3d50c7c986df74c645c0ac54639741c90a557 |
          | UCHIJA | forge     | 14.23.5.2768 | forge-1.12.2-14.23.5.2768.jar | e3c3d50c7c986df74c645c0ac54639741c90a557 |     Loaded coremods (and transformers): 
          GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
          Launched Version: 1.12.2-forge1.12.2-14.23.5.2768
          LWJGL: 2.9.4
          OpenGL: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
          GL Caps: Using GL 1.3 multitexturing.
      Using GL 1.3 texture combiners.
      Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
      Shaders are available because OpenGL 2.1 is supported.
      VBOs are available because OpenGL 1.5 is supported.     Using VBOs: Yes
          Is Modded: Definitely; Client brand changed to 'fml,forge'
          Type: Client (map_client.txt)
          Resource Packs: 
          Current Language: English (US)
          Profiler Position: N/A (disabled)
          CPU: 4x Intel(R) Core(TM) i5-4570S CPU @ 2.90GHz ____________________________________________________________________________________________________________________________________________________ i would appreciate any help on the subject Thanks! -Frick
  • Topics

    • Pkbldr
      2
      Trouble Updating Forge

      By Pkbldr
      Started 18 minutes ago

    • WesterlyClown
      3
      I am not able to run the forge installer

      By WesterlyClown
      Started Tuesday at 02:26 AM

    • Frick
      0
      Game crash upon startup

      By Frick
      Started 18 minutes ago

    • Defacto
      2
      Add Armor Material Forge 1.13.2

      By Defacto
      Started 1 hour ago

    • maciejsztos
      0
      NPC Follower Guard

      By maciejsztos
      Started 38 minutes ago

  • Who's Online (See full list)

    • HighCrit
    • PulseBeat_02
    • Splint
    • Pkbldr
    • DaemonUmbra
    • HN443
    • Frick
    • Yoyoness_
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • How to retrieve the size of a model part
  • Theme
  • Contact Us

Copyright © 2017 ForgeDevelopment LLC Powered by Invision Community