Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[SOLVED][1.12.2] Custom snowballs sometimes hitting thrower


Sunser
 Share

Recommended Posts

Hi all. Before I start, know that I'm beginning with MC mod developing, plus my English is not always very clear. :/

 

I'm trying to create custom snowballs. I have met some issues with the

protected void onImpact(RayTraceResult result);

function. Sometimes, the thrower receives the snowball's effects, and obviously not want this. This does not append with all of my custom snowballs.

EntityFlintSnowball : working correctly (I haven't change that much the original code from the snowball entity)

Spoiler

 


@Override
protected void onImpact(RayTraceResult result) {
	if (result.entityHit != null) {
		int i = 0;
		if (result.entityHit instanceof EntityPlayer) {
			i=2; 
		}
		result.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), (float)i);
	} 
	if (!this.world.isRemote) {
		this.world.setEntityState(this, (byte)3); this.setDead(); 
	} 
}

 

 

 

EntityTNTSnowball : working correctly (a bit more changes)

Spoiler

 


@Override
    protected void onImpact(RayTraceResult result)
    {
        if (!this.world.isRemote)
        {
            Explosion explosionIn = new Explosion(this.world,this.thrower,this.posX,this.posY,this.posZ,0.5F,false,true);
            EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(this.world, (double)((float)this.posX + 0.5F), this.posY, (double)((float)this.posZ + 0.5F), explosionIn.getExplosivePlacedBy());
            entitytntprimed.setFuse((short)(this.world.rand.nextInt(entitytntprimed.getFuse() / 4) + entitytntprimed.getFuse() / 8));
            this.world.createExplosion(entitytntprimed, this.posX, this.posY + (double)(this.height / 16.0F), this.posZ, 1.0F, true);

            this.world.setEntityState(this, (byte)3);
            this.setDead();
        }
    }

 

EntityPoisonSnowball : not working correctly (thrower hit by projectile)

Spoiler

@Override
    protected void onImpact(RayTraceResult result)
    {
        if (result.entityHit != null)
        {
            if (result.entityHit instanceof EntityPlayer)
            {
                PotionEffect eff = new PotionEffect(MobEffects.POISON,60);
                ((EntityPlayer) result.entityHit).addPotionEffect(eff);
                result.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), 0.0F);

            }
        }

        if (!this.world.isRemote)
        {
            this.world.setEntityState(this, (byte)3);
            this.setDead();
        }
    }

 

EntityFireSnowball : not working correctly

Spoiler

@Override
    protected void onImpact(RayTraceResult result)
    {
        if (result.entityHit != null)
        {
            if (result.entityHit instanceof EntityPlayer)
            {
                result.entityHit.setFire(3);
            }
            result.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), 0.0F);
        }

        if (!this.world.isRemote)
        {
            this.world.setEntityState(this, (byte)3);
            this.setDead();
        }
    }

 

All my snowballs are registered, rendered and working well apart from this problem. Please let me know if you have any idea. Thanks for reading.

 

Edited by Sunser
solved
Link to comment
Share on other sites

As far as I know this is an issue from vanilla, the EntityArrow has an if clause to check if the owner was hit and ignores him. YOu could do similar checks respecting the age to make it possible to hit yourself if you throw it straight up.

Edited by MCenderdragon

catch(Exception e)

{

 

}

Yay, Pokémon exception handling, gotta catch 'em all (and then do nothing with 'em).

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
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.

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Your report is very hard to actually understand. Your best bet is to stop trying to 'describe' the issue and provide the actual tag files and  what you are expecting to happen. Because all of our tests in tags work just fine. Also, there is no 'registering' of tag in the sense you're talking about. All tags are 'registered' when they are read from disc in one pass. So ya, provide us a test case of your tags and we'll see if it's a real issue or not.
    • Minecraft Version: 1.16.5 Forge Version: 36.2.0 Description of issue: A loaded mod containing data pack tag registries, which creates new tags and references the new tags to further register the items in existing tags fails to register anything in the existing tags. Example: Tinkers Construct v3.1.2.265 contains Json files to register: forge:ingots/cobalt as a new tag containing cobalt_ingot and add to previously registered tag forge:ingots. In the file for forge:ingots, values of "tconstruct:seared_brick", "tconstruct:scorched_brick", "#forge:ingots/copper", "#forge:ingots/cobalt", etc. are indicated. In-game, none of the items listed as values are tagged under forge:ingots, however the new tags including forge:ingots/cobalt include the items tagged in those files. Further, copying the json file for forge:ingots and placing in a later applied datapack, such as Kubejs, and reloading, properly registers the forge:ingots tags. This would appear to be an issue with timing of registering the new tags. Before copying the json file to a datapack, the existing tag (forge:ingots) appears to be handled first, which containing references to new tags that are not yet processed (forge:ingots/cobalt) fails and does not register any of the appended values. But in the second instance because the copied json file is processed after the mod jar file as a whole, the new tags exist and the appending of the new values succeeds. While I have given Tinkers construct as an example I have viewed the same issue with multiple mods, each of which uses references to new tags in an appending of an existing tag. Likewise, mods that do not exhibit this behavior use explicit item listings rather than referencing a new tag. I looked through the log files and did not identify any error or other message relating to the registration of tags in general or specifically these exemplar tags.
    • Debug.log here: https://gist.github.com/DexTGS/4f33065cbe2ad844b76ed1b1890fd069 . Game crashing once I die.
    • I'm making a mob like zombified piglin except instead of all the mobs getting mad at you I want to make it do they all go into a panic. How can I do this?
    • What. Just register your events in your mod constructor or use the class annotation.
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.