Jump to content

How do i make an entity changing it´s model and scale if it gets damage?


Recommended Posts

Posted

Hello

 

I´m working on an Angry Birds-mod.

 

One of the birds (the orange one) is very small, but has the ability to inflate him self like a balloon.

 

For this one, i have 2 model-files.

 

Is there any way, how i can script, that he inflates him self for a few secconds by getting damage (by changing his model and scale from 0,5 to 1 and back to 0,5)?

 

I already managet to scale the very small birds down to 0.5 while spawning them

 

Posted

... Like you've said, you can change the scale from 0.5 to 1 to simulate inflating.

 

Override

Entity#attackEntityFrom

.

Some tips:

  Reveal hidden contents

 

Posted
Entity#setSize

 

Some tips:

  Reveal hidden contents

 

Posted

1. If you just want to resize the rendered model, add an EventSubscriber for RenderLivingEvent.Pre and use GlStateManager#scale to resize the rendered model.

2. https://stackoverflow.com/questions/11247793/why-do-some-folks-use-classmethod-instead-of-class-method-in-correspondence (or, you know, Google is your friend)

Some tips:

  Reveal hidden contents

 

Posted

Why do you want to change the model?

To simulate the inflating you just need to change the size of your entity.

The 2 models are not necessary.

Some tips:

  Reveal hidden contents

 

Posted (edited)

If this bird is inflated in the Angry Birds games, his face and feathers look mouch smaller relative to his swollen body.

maxresdefault.jpg

So i made a seccond model file with this look.

And i want to combine it with resizing too

Edited by Drachenbauer
Posted

How do you plan on going between the models?

About Me

  Reveal hidden contents

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Posted

Ok, but how do you plan to smoothly transfer between two static models? Or do you not care about transferring smoothly?

About Me

  Reveal hidden contents

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Posted

About Me

  Reveal hidden contents

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

  • 4 months later...
Posted (edited)

Now i have both model-classes with their renderer-classes.

 

How can i switch bitween the renderers, if the entity collides with the player (i think, that´s better than damage, so i can cause him to inflate, withouf damage him)?

I found this mothod for the collision.

    @Override
    public void onCollideWithPlayer(PlayerEntity entityIn)
    {
        super.onCollideWithPlayer(entityIn);
    }

What must i put in there to cause a change to the other renderer?

 

During another project, i found a way to make it first do stuff, than wait a time, than do other stuff:

With this i will make him inflate in the moment of the collision and deflate 4 seconds later:

    @Override
    public void onCollideWithPlayer(PlayerEntity entityIn)
    {
        //command for inflate
        timer.schedule(new TimerTask()
        {
            @Override
            public void run()
            {
                //command for deflate after 4 seconds
            }
        }
        , 4000);
        
        super.onCollideWithPlayer(entityIn);
    }

But what must i put above and inside the timer to change the renderer for this instance of the entity?

Edited by Drachenbauer
Posted
  On 7/15/2019 at 8:13 PM, Drachenbauer said:

What must i put in there to cause a change to the other renderer?

Expand  

I would have a field on my entity that would store the time since it was last hit, set it to 0 in that method and increment it each tick.

 

  On 7/15/2019 at 8:13 PM, Drachenbauer said:

timer.schedule(new TimerTask()

Expand  

do NOT do this. 

About Me

  Reveal hidden contents

Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support.

When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible.

Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org

Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)

Posted (edited)
  On 7/16/2019 at 1:33 AM, Cadiboo said:

I would have a field on my entity that would store the time since it was last hit, set it to 0 in that method and increment it each tick.

 

do NOT do this. 

Expand  

Why i should not do this timer thing?

In my other project (a simple sokoban-game, nothing about minecraft) it works fine.

 

And how do i increase a time-field by tick?

Edited by Drachenbauer
Posted (edited)

Is this better:

    @Override
    public void livingTick()
    {
        timeUntilDeflating++;
        
        if (timeUntilDeflating >= 80)
        {
            //command or deflating here
        }
        
        super.livingTick();
    }
    
    @Override
    public void onCollideWithPlayer(PlayerEntity entityIn)
    {
        timeUntilDeflating = 0;
        //command for inflating here
    }
Edited by Drachenbauer
Posted
  On 2/16/2019 at 6:22 PM, Drachenbauer said:

Hello

 

I´m working on an Angry Birds-mod.

 

One of the birds (the orange one) is very small, but has the ability to inflate him self like a balloon.

 

For this one, i have 2 model-files.

 

Is there any way, how i can script, that he inflates him self for a few secconds by getting damage (by changing his model and scale from 0,5 to 1 and back to 0,5)?

 

I already managet to scale the very small birds down to 0.5 while spawning them

 

Expand  

Angry zombies in Thaumcraft grow larger when they damaged by players.
you can view Thaumcraft source aswell  :\

Posted

what i need is, how to change the renderer for this instance, because the proportions of this bird change, if he inflates himself.

His body expands, but his face and feathers stax the same size.

So i have two renderers, wich use different models.

If i register both in my render-handler, the seccond one is used for the entity.

At first i thaught, maybe it will render both at the same place, doing the same stuff in the same moment.

But that isn´t the case.

 

so what must i put in the command-spots of the piece of code in my last post to change the renderer for this instance?

Posted (edited)

I have got an idea:

I can create the inflated version as an own entity without living animations.

And in the original entity of the bird, it should spawn the inflated version at it´s position, if i collide with him and despawn it after the four secconds, i declared in the living-tick.

And while theese four secconds, the normal one should do no living animations to stay hidden inside the inflated model.

 

My code in the entity-class for this so far:

    @Override
    public void livingTick()
    {
        if (timeUntilDeflating > 0)
        {
            timeUntilDeflating--;
            
            if (timeUntilDeflating == 0)
            {
                //command for deflating here
            }
        }
        else
        {
            super.livingTick();
        }
    }
    
    @Override
    public void onCollideWithPlayer(PlayerEntity entityIn)
    {
        if (timeUntilDeflating == 0)
        {
            timeUntilDeflating = 80;
            //command for inflating here
        }
    }

It actually makes the entity stop it´s whoole movement and animations for four secconds after a collision with the player.

I´ll use this effect to keep the normal model hidden inside the inflated one.

 

I´m still working on an abstract renderer, that uses a model-class and scalefactor, but no living-animations (for the inflated variant).

 

How do i write a command, that spawns the inflated entity and fits in here?

And one that despawns it?

It should be spawned in the actual position of the normal one (to encase it) and with it´s rotation-angle around the vertical axis.

Edited by Drachenbauer
  • 6 months later...
Posted (edited)

Now i use two models ant e texture, thad holds stuff for both models to simulate his inflating skill.

This worked well.

Then i thaught about resizing his boundingbox to fit the two different sizes.

Now he disappears, if i run into him to make him inflate.

I created theese boundingboxes:

    protected static final AxisAlignedBB BBUBBLES_AABB = new AxisAlignedBB(6.0D, 0.0D, 6.0D, 12.0D, 4.0D, 12.0D);
    protected static final AxisAlignedBB BBUBBLES_INFLATED_AABB = new AxisAlignedBB(-2.0D, 0.0D, -2.0D, 18.0D, 20.0D, 18.0D);

 

and use them in theese methods:

    @Override
    public void livingTick()
    {
        if (timeUntilDeflating > 0)
        {
            timeUntilDeflating--;
            
            if (timeUntilDeflating == 0)
            {
                isInflated = false;
                setBoundingBox(BBUBBLES_AABB);
                
            }
        }
        else
        {
            super.livingTick();
        }
    }
    
    @Override
    public void onCollideWithPlayer(PlayerEntity entityIn)
    {
        if (timeUntilDeflating == 0)
        {
            timeUntilDeflating = 80;
            isInflated = true;
            setBoundingBox(BBUBBLES_INFLATED_AABB);
        }
    }

in ormal state he is a 4x4x4 pixels (1/4 block-edgelength) cube and inflated 20.2.x2.pixels (a bit bigger than a block)

Is something wrong with my boundingboxes?

Edited by Drachenbauer

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • A few months ago, I was approached online by a so-called investment broker. Everything looked professional — flashy websites, fake but convincing reviews, even video calls with people who seemed legitimate. They promised unbelievable returns on Bitcoin investments, and I, eager to grow my crypto holdings, fell for it. Over a few weeks, I transferred Bitcoin worth around $360,000 to what I thought was a secured investment wallet. The “broker” kept assuring me my money was growing, even showing fake dashboards with fabricated profits. But when I tried to withdraw my funds, they demanded additional fees — taxes, account, activation, and release charges. That’s when the truth hit me I had been scammed. Devastated, I started searching for solutions. But then, a glimmer of hope. A cybersecurity contact muttered Try Dexdert Net Recovery. They hunt crypto ghosts. Dexdert Net had real testimonials, detailed explanations of their process, and most importantly, they didn’t ask for any suspicious upfront fees. After contacting them, their team patiently walked me through the steps gathering all evidence of the scam, tracking the Bitcoin transactions on the blockchain, and using legal recovery channels and cyber forensic methods. They kept me updated at every stage. 4 days later, I got the email I’ll never forget: Funds Recovered. Dexdert Net Recovery successfully trace and retrieve the entire $360,000 worth of Bitcoin from the scammer’s wallets. Thanks to Dexdert Net Pro Recovery, not only did I reclaim my lost Bitcoin, but I also regained a sense of justice — and a serious lesson learned. If you’re ever in a situation like I was, know this: there’s hope, and there are real experts out there who can help. Dexdert Net Recovery proved it to me. CONTACT DEXDERT NET RECOVERY VIA INFORMATION BELOW   Telegram: (@Dexdertprorecovery)      
    • So I just try to remove mods and see what works?
    • Hello, I want to change some things about a specific mod. I made some small mods for myself before, but I don't know how to use other mods as a dependencie and add the repositories. My build.gradle file looks something like this:   repositories { flatDir { dirs 'libs' } } dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" implementation fg.deobf("libs:create-1.20.1:0.5.1.f") implementation fg.deobf("libs:create-stuff-additions1.20.1:2.0.4a") } I have the folder libs in my root folder. If I start the gradlew.exe, I get the following output: > Configure project : Java: 17.0.15, JVM: 17.0.15+6 (Eclipse Adoptium), Arch: amd64 files(...) dependencies are not deobfuscated. Use a flatDir repository instead: https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:flat_dir_resolver Cannot deobfuscate dependency of type DefaultSelfResolvingDependency_Decorated, using obfuscated version! files(...) dependencies are not deobfuscated. Use a flatDir repository instead: https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:flat_dir_resolver Cannot deobfuscate dependency of type DefaultSelfResolvingDependency_Decorated, using obfuscated version! I don't know why this warning occurs or how to fix it. If I try to build the whole thing, I get the same message, but this time as an error and the build process crashes. I looked at the gradle dependencies website (https://docs.gradle.org/current/userguide/dependency_management_for_java_projects.html), but everything I tried did not work.   I use the Minecaft version 1.20.1 and the Forge version 47.2.17. Both mods don't have other dependencies and work perfectly fine if I start the game normaly.   Can someone explain to me why it does not work and/or where I can get help? Something like a documentation would be enough.
    • im just going to play without shaders(my friends will be dissapointed)
    • crashed the game // Embeddium instance tainted by mods: [oculus] // Please do not reach out for Embeddium support without removing these mods first. // ------- // Why did you do that? flywheel is needed for oculus but when i go into mc it then says sodium is 0.5.3(rubidum fork of sodium ported to forge)
  • Topics

×
×
  • Create New...

Important Information

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