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

[1.12] Custom EntityPotion/EntityTippedArrow to spawn with vanilla potion/arrows


Samaritans
 Share

Recommended Posts

Hey,

 

I'm adding some new tipped arrows using my mod's potions, but some of them have effect on impact to blocks not just entities, so I need my custom EntityPotion and EntityTippedArrows. However, currently I am basically getting any potion/arrow that enters the world and reconstructing them from NBT. This breaks compatibility with other mods that add custom arrows, is there any remedy?

 

Event for joining world where i reconstruct them (trying to avoid):

	@SubscribeEvent
	public void joinWorld(EntityJoinWorldEvent event) {
		if (!event.getWorld().isRemote) {
			if (event.getEntity() instanceof EntityPotion && !(event.getEntity() instanceof ModEntityPotion)) {
				ModEntityPotion entity = new ModEntityPotion(event.getWorld());
				entity.deserializeNBT(event.getEntity().serializeNBT());
				event.getWorld().spawnEntity(entity);
				event.setCanceled(true);
			}
			else if (event.getEntity() instanceof EntityTippedArrow && !(event.getEntity() instanceof ModEntityTippedArrow)) {
				Entity shooter = ((EntityTippedArrow) event.getEntity()).shootingEntity;
				ModEntityTippedArrow entity = shooter instanceof EntityLivingBase ? new ModEntityTippedArrow(event.getWorld(), (EntityLivingBase) shooter) : new ModEntityTippedArrow(event.getWorld());
				entity.deserializeNBT(event.getEntity().serializeNBT());
				event.getWorld().spawnEntity(entity);
				event.setCanceled(true);
			}
		}
	}

 

Where my recipe is registered:

		ForgeRegistries.RECIPES.register(new RecipeTippedArrow() {
			@Override
			public ItemStack getCraftingResult(InventoryCrafting inv) {
				ItemStack stack = super.getCraftingResult(inv);
				if (PotionUtils.getPotionFromItem(stack) == PotionTypes.EMPTY) stack.getTagCompound().setInteger("CustomPotionColor", PotionUtils.getPotionColorFromEffectList(PotionUtils.getFullEffectsFromItem(stack)));
				return stack;
			}
		}.setRegistryName("minecraft", "tippedarrow"));

 

I know I could probably just copy vanilla code and make my own ItemTippedArrow, ItemPotion, and then put my own spawnarrow, etc.. but I'd also have to copy over stuff that handles textures, colors etc and it just seems inefficient.

 

Thanks in advance!

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.
Note: Your post will require moderator approval before it will be visible.

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



×
×
  • Create New...

Important Information

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