Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

So I have created this class for rendering a projectile that extends SpriteRenderer, but when I try to override getEntityTexture I get this error:

'getEntityTexture(Entity)' in 'com.aylias.minecraft.mods.modbase.client.renders.CorruptPearlRenderer' clashes with 'getEntityTexture(T)' in 'net.minecraft.client.renderer.entity.EntityRenderer'; both methods have same erasure, yet neither overrides the other

How do I override it without getting this error? I have tried googling the error, even as just "both methods have same erasure, yet neither overrides the other" but found nothing that can help. Here is the class:

package com.aylias.minecraft.mods.modbase.client.renders;

import com.aylias.minecraft.mods.modbase.ModBase;
import com.aylias.minecraft.mods.modbase.entities.CorruptPearlEntity;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.SpriteRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.client.registry.IRenderFactory;

@OnlyIn(Dist.CLIENT)
public class CorruptPearlRenderer extends SpriteRenderer<CorruptPearlEntity> {
    
    public CorruptPearlRenderer(EntityRendererManager renderManagerIn, ItemRenderer itemRendererIn) {
        super(renderManagerIn, itemRendererIn);
    }

    @Override
    public ResourceLocation getEntityTexture(Entity entity) {
        return new ResourceLocation(ModBase.MODID, "textures/item/corrupt_pearl.png");
    }

    public static class RenderFactory implements IRenderFactory<CorruptPearlEntity> {

        @Override
        public EntityRenderer<? super CorruptPearlEntity> createRenderFor(EntityRendererManager manager) {
            manager.setRenderShadow(false);
            return new CorruptPearlRenderer(manager, Minecraft.getInstance().getItemRenderer());
        }
    }
}

 

Edited by NullDev
It was solved!

  • Author
21 minutes ago, Beethoven92 said:

Just override getDefaultItem in your CorruptPearlEntity class and return the corresponding item

I have already done that, but it just assumes the texture of the normal ender pearl not the one attached to the corrupt pearl item, even if I don't register the CorruptPearlRenderer it still just looks like an ender pearl.

@Override
protected Item getDefaultItem() {
	return RegistryHandler.CORRUPT_PEARL.get();
}

 

  • Author
1 minute ago, Beethoven92 said:

Show your whole code please

Corrupt Pearl Entity

package com.aylias.minecraft.mods.modbase.entities;

import com.aylias.minecraft.mods.modbase.util.CorruptPearlReboundEvents;
import com.aylias.minecraft.mods.modbase.util.EntityRegisters;
import com.aylias.minecraft.mods.modbase.util.RegistryHandler;
import net.minecraft.client.renderer.ItemModelMesher;
import net.minecraft.client.renderer.entity.ArrowRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.item.EnderPearlEntity;
import net.minecraft.entity.monster.EndermiteEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.EntityRayTraceResult;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World;

public class CorruptPearlEntity extends EnderPearlEntity {


    CorruptPearlReboundEvents.Rebounder toActivate;

    public CorruptPearlEntity(World worldIn, LivingEntity throwerIn) {
        super(worldIn, throwerIn);
        CorruptPearlReboundEvents.addRebounder(throwerIn);
        toActivate = CorruptPearlReboundEvents.toRebound.get(CorruptPearlReboundEvents.toRebound.size() - 1);
    }

    public CorruptPearlEntity(World worldIn, double x, double y, double z) {
        super(worldIn, x, y, z);
    }

    public CorruptPearlEntity(EntityType<? extends EnderPearlEntity> p_i50153_1_, World p_i50153_2_) {
        super(p_i50153_1_, p_i50153_2_);
    }

    @Override
    protected void onImpact(RayTraceResult result) {
        toActivate.activate();
        super.onImpact(result);
    }

    @Override
    protected Item getDefaultItem() {
        return RegistryHandler.CORRUPT_PEARL.get();
    }

    


}

 

Your entity is in fact bound to an EntityType<EnderPearlEntity>, instead of your custom pearl entity type, see that in your entity constructors your are not passing in any entity type because the super class(EnderPearlEntity) already provides its own, which is not what you want..i suggest you just extend the projectile item entity class and replicate the Ender pearl behavior where needed

Edited by Beethoven92

Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port

  • Author
1 hour ago, Beethoven92 said:

i suggest you just extend the projectile item entity class and replicate the Ender pearl behavior where needed

I have done that, but now the entity is just invisible... I uploaded the new code to the repository.

  • Author
26 minutes ago, Beethoven92 said:

You need to override createSpawnPacket in your entity, and return NetworkHooks.getEntitySpawningPacket

    @Override
    public IPacket<?> createSpawnPacket() {
        return NetworkHooks.getEntitySpawningPacket(this);
    }

That crashed the game when I threw it.

  • NullDev changed the title to [Solved] Rendering Projectiles

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.