Is this a bug or is there some reason that writing NBT data changes how right mouse up is handled, or am I doing something different wrong?
Also by adding some simple logging and using @SubscribeEvent that the PlayerUseItemEvent.Stop event isn't always triggered when the use button is released if NBT data is written.
Example code snippet:
public class ItemRFBlaster {
//some methods ommited for brevity
@Override
public void onPlayerStoppedUsing(ItemStack itemstack, World world, EntityPlayer entityPlayer, int itemInUseCount)
{
super.onPlayerStoppedUsing(itemstack,world,entityPlayer,itemInUseCount);
logger.info("Stopped using");
if(getFiremode(itemstack) == Firemode.Single) {
tryFire(itemstack, world, entityPlayer, itemInUseCount);
}
setCoolingdown(itemstack);
setPartialTicks(itemstack, 0);
}
@Override
public void onUsingTick(ItemStack stack, EntityPlayer player, int count) {
super.onUsingTick(stack, player, count);
logger.info("count: {}",count);
if(player.getEntityWorld().isRemote)
return;
assert(player.isUsingItem());
if(!canFire(stack)) {
setCoolingdown(stack);
return;
}
if(getFiremode(stack) == Firemode.Auto){
tryFire(stack,player.getEntityWorld(),player,count);
}else if(getFiremode(stack) == Firemode.Burst){
if(tryFire(stack,player.getEntityWorld(),player,count)) {
incrBurst(stack);
}
}
}
@Override
public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityPlayer)
{
if(entityPlayer.isSneaking())
{
if(!world.isRemote) {
cycleFiremode(itemstack, entityPlayer);
}
}
else if (entityPlayer.capabilities.isCreativeMode || getEnergyStored(itemstack) >= 5)
{
entityPlayer.setItemInUse(itemstack, this.getMaxItemUseDuration(itemstack));
}
return itemstack;
}
}
Where tryFire, incrBurst, and canFire read and write NBT data.
If the NBT data writing is commented out then onPlayerStoppedUsing is always called when I expect it.