Posted June 16, 20214 yr Ive already made an arrow entity (derived from vanilla one), and it works fine (they dont get picked up by a player), but for some reason my texture is not rendered, the arrow looks like vanilla one... Arrow code: public class HolyArrow extends ArrowEntity { public HolyArrow(World world, PlayerEntity player){ super(world, player); } public HolyArrow(EntityType<HolyArrow> type, World world){ super(type, world); } public void onCollideWithPlayer(PlayerEntity entityIn) {} //no pickup public static EntityType<HolyArrow> getRegistryType(){ return (EntityType<HolyArrow>) EntityType.Builder .<HolyArrow>create(HolyArrow::new, EntityClassification.MISC) .size(1, 1) .build("") .setRegistryName("holy_arrow"); } } Renderer (the texture method is never called): public class HolyArrowRenderer extends ArrowRenderer<HolyArrow> { public HolyArrowRenderer(EntityRendererManager e){ super(e); } @Override public ResourceLocation getEntityTexture(HolyArrow entity) { System.out.println("texture requested"); return new ResourceLocation(Soul.id, "textures/entity/holy_arrow.png"); } } Registering a renderer: @Mod.EventBusSubscriber(value=Dist.CLIENT, bus=Mod.EventBusSubscriber.Bus.MOD) public class ClientEvents { @SubscribeEvent public static void setupClient(FMLClientSetupEvent event){ RenderingRegistry.registerEntityRenderingHandler(Entities.holyArrow, HolyArrowRenderer::new); } } Registering an entity: @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) public class RegistryEvents { @SubscribeEvent static void registerEntities(final RegistryEvent.Register<EntityType<?>> event){ event.getRegistry().registerAll(Entities.holyArrow); } } Entity reference: public class Entities { public static final EntityType<HolyArrow> holyArrow = HolyArrow.getRegistryType(); }
June 16, 20214 yr Author Quote Your registry code is broken. Read the documentation The problem is, in docs its only said how to register EntityTypes through DeferredRegisters... Quote You must always specify your entity type Ive added an override for getType() {return Entities.holyArrow;} now the arrows are simply invisible. Am I doing right? Quote Your entity must also override getAddEntityPacket and return NetworkHooks.getEntitySpawningPacket Ok, but it didnt change anything
June 16, 20214 yr Author I think Ive done everything as it and you say, and I looked through other mods code and it looks similar everywhere, but the arrows are still invisible, whats wrong? public class Entities { public static final EntityType<HolyArrow> holyArrow = EntityType.Builder .<HolyArrow>create(HolyArrow::new, EntityClassification.MISC) .size(1, 1) .build(""); } public class HolyArrow extends AbstractArrowEntity { public HolyArrow(World world, PlayerEntity player){ super(Entities.holyArrow, player, world); } public HolyArrow (EntityType<HolyArrow> type, World world){ super(Entities.holyArrow, world); } public IPacket<?> createSpawnPacket() { Entity entity = this.getShooter(); return NetworkHooks.getEntitySpawningPacket(entity); } public void onCollideWithPlayer(PlayerEntity entityIn) {} //no pickup @Override protected ItemStack getArrowStack() { return null; } } @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) public class RegistryEvents { @SubscribeEvent static void registerEntities(final RegistryEvent.Register<EntityType<?>> event){ event.getRegistry().registerAll(Entities.holyArrow.setRegistryName("holy_arrow")); } } @Mod.EventBusSubscriber(value=Dist.CLIENT, bus=Mod.EventBusSubscriber.Bus.MOD) public class ClientEvents { @SubscribeEvent public static void setupClient(FMLClientSetupEvent event){ RenderingRegistry.registerEntityRenderingHandler(Entities.holyArrow, HolyArrowRenderer::new); } }
June 16, 20214 yr Author Quote Why are you creating a spawning packet for the shooter instead of your entity?! Oh hell, that was the problem, now it finally works XD Im just tired and didnt notice that, thanks a lot!
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.