@SideOnly(Side.CLIENT)
  @Override
  public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random) {
    int l = par1World.getBlockMetadata(par2, par3, par4);
    Block i = par1World.getBlock(par2, par3 - 1, par2);
    boolean b = false;

    // パーティクルの設定
    String FXName = "blink";
    float R = 1.0F;
    float G = 1.0F;
    float B = 1.0F;

    TileIncenseBase tile = (TileIncenseBase) par1World.getTileEntity(par2, par3, par4);
    if (tile != null) {
      b = tile.getActive();
      if (b) {
        if (tile.hasItem() && tile.getItemstack().getItem() instanceof IIncenseEffect) {
          IIncenseEffect incense = (IIncenseEffect) tile.getItemstack().getItem();
          FXName = incense.particleIcon();
          R = incense.particleColorR();
          G = incense.particleColorG();
          B = incense.particleColorB();
        }
      }
    }

    double d0 = (double) ((float) par2 + par5Random.nextFloat());
    double d1 = (double) ((float) par3 - 0.4F + par5Random.nextFloat());
    double d2 = (double) ((float) par4 + par5Random.nextFloat());
    double d3 = 0.0099999988079071D;
    double d4 = 0.0099999988079071D;
    double d5 = 0.0099999988079071D;

    if (!DCsConfig.noRenderFoodsSteam && b) {
      EntityDCCloudFX cloud = new EntityDCCloudFX(par1World, d0, d1, d2, 0.0D, d4, 0.0D);
      cloud.setParticleIcon(ParticleTex.getInstance().getIcon(FXName));
      cloud.setRBGColorF(R, G, B);
      cloud.setAlphaF(0.75F);
      FMLClientHandler.instance().getClient().effectRenderer.addEffect(cloud);
    }
  }
  // 右クリック処理
  @Override
  public boolean onBlockActivated(
      World par1World,
      int par2,
      int par3,
      int par4,
      EntityPlayer par5EntityPlayer,
      int par6,
      float par7,
      float par8,
      float par9) {
    ItemStack itemstack = par5EntityPlayer.inventory.getCurrentItem();
    int meta = par1World.getBlockMetadata(par2, par3, par4);
    TileIncenseBase tile = (TileIncenseBase) par1World.getTileEntity(par2, par3, par4);

    AMTBlockRightClickEvent event =
        new AMTBlockRightClickEvent(par1World, par5EntityPlayer, itemstack, par2, par3, par4);
    MinecraftForge.EVENT_BUS.post(event);

    if (event.isCanceled()) {
      return true;
    }

    if (itemstack == null) // 回収動作
    {
      if (!par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(this, 1))) {
        if (!par1World.isRemote) par5EntityPlayer.entityDropItem(new ItemStack(this, 1), 1);
      }

      par1World.setBlockToAir(par2, par3, par4);
      par1World.playSoundAtEntity(par5EntityPlayer, "random.pop", 0.4F, 1.8F);
      return true;
    } else if (itemstack.getItem() == Item.getItemFromBlock(this)) {
      if (!par1World.isRemote) {
        EntityItem entity =
            new EntityItem(
                par1World,
                par5EntityPlayer.posX,
                par5EntityPlayer.posY,
                par5EntityPlayer.posZ,
                new ItemStack(this, 1));
        par1World.spawnEntityInWorld(entity);
      }

      par1World.setBlockToAir(par2, par3, par4);
      par1World.playSoundAtEntity(par5EntityPlayer, "random.pop", 0.4F, 1.8F);
      return true;
    } else if (itemstack.getItem() instanceof IIncenseEffect) // お香アイテムの場合
    {
      if (tile != null && !tile.hasItem()) {
        ItemStack put = itemstack.copy();
        tile.setItemstack(put);
        if (!par5EntityPlayer.capabilities.isCreativeMode
            && (itemstack.stackSize - put.stackSize) <= 0) {
          par5EntityPlayer.inventory.setInventorySlotContents(
              par5EntityPlayer.inventory.currentItem, (ItemStack) null);
        }
        tile.markDirty();
        par5EntityPlayer.inventory.markDirty();
        par1World.markBlockForUpdate(par2, par3, par4);
        par1World.playSoundAtEntity(par5EntityPlayer, "random.pop", 0.4F, 1.8F);
        return true;
      }
      return false;
    } else if (itemstack.getItem() == Items.flint_and_steel
        || itemstack.getItem() == DCsAppleMilk.firestarter) {
      if (tile != null && tile.hasItem() && !tile.getActive()) {
        par5EntityPlayer.triggerAchievement(AchievementRegister.useIncense);
        itemstack.attemptDamageItem(1, par1World.rand);
        tile.setActive();
        tile.markDirty();
        par1World.setBlockMetadataWithNotify(par2, par3, par4, 1, 3);
        par1World.playSoundAtEntity(par5EntityPlayer, "random.pop", 0.4F, 1.8F);
        par1World.scheduleBlockUpdate(par2, par3, par4, this, this.tickRate(par1World));
        return true;
      }
      return false;
    } else {
      return false;
    }
  }
  @Override
  public void updateTick(World world, int x, int y, int z, Random rand) {
    if (!world.isRemote) {
      TileIncenseBase tile = (TileIncenseBase) world.getTileEntity(x, y, z);
      boolean active = tile.getActive();

      if (active) {
        ItemStack item = tile.getItemstack();
        if (item != null && item.getItem() instanceof IIncenseEffect) {
          IIncenseEffect effect = (IIncenseEffect) item.getItem();

          EffectType type = effect.getEffectType();
          int area = effect.effectAreaRange();

          if (type == EffectType.Player) {
            List list = this.searchPlayer(world, x, y, z, area);

            if (list != null && !list.isEmpty()) {
              Iterator iterator = list.iterator();

              while (iterator.hasNext()) {
                Entity entity = (Entity) iterator.next();

                if (entity instanceof EntityLivingBase) {
                  EntityLivingBase target = (EntityLivingBase) entity;

                  effect.formEffect(world, x, y, z, target, effect);
                }
              }
            }
          } else if (type == EffectType.EntityLiving) {
            List list = this.searchEntity(world, x, y, z, area);

            if (list != null && !list.isEmpty()) {
              Iterator iterator = list.iterator();

              while (iterator.hasNext()) {
                Entity entity = (Entity) iterator.next();

                if (entity instanceof EntityLivingBase) {
                  EntityLivingBase target = (EntityLivingBase) entity;

                  effect.formEffect(world, x, y, z, target, effect);
                }
              }
            }
          } else if (type == EffectType.Block) {
            for (int i = 0; i < effect.effectAreaRange(); i++) {
              int[] pos = this.searchBlock(world, x, y, z, area);

              if (pos != null && pos.length == 3) {
                effect.formEffect(world, pos[0], pos[1], pos[2], null, effect);
              }
            }
          }
        }

        world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
      }
    }
  }