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

[1.12.2] Changing entity hitbox after it has been spawned


Recommended Posts

Hey folks,

I'm trying to implement a special type of wolf (a direwolf, from the ASOIAF universe) with four different growth stages. First and foremost, these stages change the rendered size of the wolf. I've got this part working already with:

protected void preRenderCallback(EntityDirewolf entityDirewolf, float b) {
    // the size of a direwolf is influenced by its stage of growth
    // at stage one, a direwolf is the same size as a normal wolf
    // at stage four, a direwolf is twice as large in every dimension
    float modifier = (entityDirewolf.getGrowthStage() / 3f) + (2f / 3f);
    GL11.glScalef(modifier, modifier, modifier);

The issue I'm struggling with is scaling the hitbox itself in line with the larger model.

Before I implemented variable stages of growth, I scaled the hitbox in the direwolf's constructor, like so:

public EntityDirewolf(World worldIn) {
    setSize(1.45f, 2.0f);

This worked fine. However, I would like to manipulate after the direwolf object has already been instantiated.

From my testing, simply using...


...after the direwolf had been spawned with...

// make a fun cuddly direwolf
EntityDirewolf direwolf = new EntityDirewolf(player.getEntityWorld());
direwolf.setPosition(player.posX, player.posY, player.posZ);

...did not do anything.

From my searching on the forums, it seems like newer versions of Forge have a 'recalculateSize()' method that might solve this problem. Unfortunately, I don't think it exists in the older version of Forge I am using, and upgrading isn't possible at this time.

Is there a way to rescale an entity's hitbox on the fly, after said entity has been spawned?

Link to comment
Share on other sites

This topic is now closed to further replies.

  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • im trying to run a modern rlcraft server but it wont even start. this is the log C:\Users\soto5\Downloads\Modern+RLCraft+Server+Pack-1.12.2-1.5.2\Modern RLCraft Server Pack-1.12.2-1.5.1>java -Xmx4096M -Xms4096M -jar forge.jar nogui A problem occurred running the Server launcher.java.lang.reflect.InvocationTargetException         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)         at java.base/java.lang.reflect.Method.invoke(Method.java:567)         at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.run(ServerLaunchWrapper.java:70)         at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.main(ServerLaunchWrapper.java:34) Caused by: java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap')         at net.minecraft.launchwrapper.Launch.<init>(Launch.java:34)         at net.minecraft.launchwrapper.Launch.main(Launch.java:28)         ... 6 more    
    • Is there a way to "override" an entity's texture to something else without creating a "dummy" item when using ThrownItemRenderer? I tried creating a Renderer that extends it with a ResourceLocation override but this does not change the entity's 2D texture. Any help would be appreciated. Render class: public class BulletEntityRenderer extends ThrownItemRenderer { private static final ResourceLocation TEXTURE = new ResourceLocation(ExampleMod.MOD_ID, "textures/entity/bullet.png"); public BulletEntityRenderer(EntityRendererProvider.Context context) { super(context); } @Override public ResourceLocation getTextureLocation(Entity entity) { return TEXTURE; } } Render registry: public class ModRender { public static void registerRender() { EntityRenderers.register(ExampleMod.BULLET, BulletEntityRenderer::new); } } Entity class: public class BulletEntity extends ThrowableItemProjectile { private float damage = 12.0F; private int pierceLevel = 0; private int ticksAlive = 0; private final int lifespan = 60; public BulletEntity(EntityType<BulletEntity> type, Level world) { super(type, world); } public BulletEntity(Player player, Level world, float damage, int pierceLevel) { super(ExampleMod.BULLET, player, world); this.damage = damage; this.pierceLevel = pierceLevel; this.setNoGravity(true); } public DamageSource causeBulletDamage(BulletEntity bullet, Entity attacker) { return (new IndirectEntityDamageSource("bullet", bullet, attacker)).setProjectile(); } public void tick() { super.tick(); Vec3 vec3d = this.getDeltaMovement(); double d1 = vec3d.x; double d2 = vec3d.y; double d0 = vec3d.z; if (this.isInWater()) { this.level.addParticle(ParticleTypes.BUBBLE, this.getX(), this.getY(), this.getZ(), -d1, -d2, -d0); } else { this.level.addParticle(ParticleTypes.SMOKE, this.getX(), this.getY(), this.getZ(), -d1, -d2, -d0); } if (ticksAlive > lifespan) { this.discard(); } ticksAlive++; } @Override protected void onHitEntity(EntityHitResult hitResult) { LivingEntity target = (LivingEntity) hitResult.getEntity(); Entity shooter = getOwner(); double armor = target.getArmorValue() * (1 - (0.2 * pierceLevel)); double toughness = target.getAttribute(Attributes.ARMOR_TOUGHNESS).getValue(); float finalDamage = (float) (damage * (1 - (Math.min(20, Math.max((armor / 5), armor - ((4 * damage) / (toughness + 8))))) / 25)); target.hurt(causeBulletDamage(this, shooter).bypassArmor(), finalDamage); } @Override public Item getDefaultItem() { return ModItems.BULLET; } }
    • Which version of Forge did you use? Post debug log
    • delete this client config file
    • Latest minecraft most viewed youtube video! Here's the link : https://shrinke.me/SCMUI
  • Topics

  • Who's Online (See full list)

  • Create New...

Important Information

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